Saat saya mencari solusi untuk pertanyaan lain, saya mendapati diri saya bertanya-tanya apakah mungkin menggunakan Calendar
kelas .NET untuk mengimplementasikan kalender yang tidak berdasarkan konvensi Bumi.
Misalnya, hari Mars sekitar 2,7% lebih lama dari satu hari di Bumi:
Sebuah konvensi yang digunakan oleh proyek pendarat pesawat ruang angkasa hingga saat ini adalah untuk melacak waktu matahari lokal menggunakan "jam Mars" 24 jam di mana jam, menit dan detik 2,7% lebih lama dari durasi standar (Bumi) mereka.
Apakah ada cara yang baik untuk mengimplementasikan MarsCalendar
sehingga panjang dari kedua berbeda dari standar GregorianCalendar
, dan dengan demikian dapat digunakan DateTime
benda berdasarkan itu untuk semua standar AddDays()
, AddHours()
, dll fungsi? (Catatan: Idealnya, sebuah solusi - jika ada - akan dapat diterapkan untuk segala bentuk objek planet yang memungkinkan untuk menentukan panjang yang konsisten "1 hari" dan "1 tahun". Mars adalah contoh yang bagus, meskipun )
Calendar
sudah mendukung pengaturan jumlah hari sewenang-wenang per tahun.Calendar
kelas C # . Kelas yang sama dapat digunakan oleh VB.NET atau bahasa .NET lainnya. Ini adalahCalendar
kelas .NET .Jawaban:
Ada beberapa kelas kalender non-Gregorian yang diturunkan dari
System.Globalization.Calendar
dalam namespace Globalization (yaituJapaneseCalendar
). Anda harus bisa menerapkannya sendiri. Saya akan menyiapkan sampel, tetapi ada 16 metode abstrak di kelas Kalender ...Anda bahkan mungkin bisa mendapatkan kelas Anda dari
GregorianCalendar
dan hanya menggantiGetMilliseconds(DateTime)
metode, mengembalikan nilai kembalian basis dikalikan dengan1.027d
.sumber