Mengapa Anda tidak menyimpan UTC di DB sejak awal? Dalam kebanyakan kasus, DateTime
harus disimpan dalam UTC, karena biasanya mengacu pada suatu titik waktu. Ini berlaku untuk apa pun yang mengacu pada waktu dalam pengertian fisik, dan apa pun yang menganggap waktu itu monoton, meningkat, dan unik, tidak ada yang benar untuk sebagian besar waktu setempat.
Kadang-kadang, menggunakan waktu setempat memang masuk akal:misalkan bus berangkat setiap hari pukul 9 pagi. Ini berarti bahwa 24 jam berlalu di antara dua peristiwa berturut-turut. Namun, jika zona waktu memiliki DST, itu akan menjadi interval 23 jam, masing-masing 25 jam setahun sekali.
Namun, jika Anda perlu memperdebatkan data semacam ini, DateTime
sederhana tidak berhasil; Aturan DST dapat berubah, zona waktu dapat berubah, dll. Dalam C#, aturan DST yang akan diterapkan adalah yang saat ini valid, bahkan jika tanggalnya 'bersejarah'. Aritmatika tanggal dengan tanggal bersejarah dapat mendatangkan malapetaka. Jika Anda benar-benar perlu mengatasi ini, paling tidak, Anda harus menyimpan yang zona waktu saat ini (tidak hanya offset, atau bahkan hanya isLocal
bendera).
Menyimpan informasi tekstual dalam database yang dapat disimpan biner tampaknya tidak terlalu elegan bagi saya, juga tidak mengubah nilai di beberapa lapisan tengah. Yang pertama tidak efisien dan menderita kekhasan waktu lokal yang disebutkan sebelumnya, yang terakhir hanya memiliki masalah ke-2.
BTW, untuk mencapai yang terakhir, Anda dapat mendekorasi properti dengan [BsonDateTimeOptions(Kind=DateTimeKind.Local)]
, yang akan melakukan konversi untuk Anda, tetapi tentu saja mengalami masalah yang sama.