Kami ingin mulai mengumpulkan zona waktu untuk setiap alamat kami di basis data. Apa praktik terbaik untuk menyimpan zona waktu? Bagaimana cara Anda mendapatkan zona waktu untuk catatan alamat yang ada?
Saya menggunakan server Microsoft SQL, .net mvc, C #. Setiap saran akan sangat dihargai.
database
database-design
time
Rodney
sumber
sumber
Jawaban:
Anda ingin menyimpan sesuatu yang tidak berubah sepanjang waktu (atau dua kali setahun). Basis data zona waktu https://en.wikipedia.org/wiki/List_of_tz_database_time_zones adalah hal yang tepat. Jadi, Anda hanya menyimpan dua surat.
Dari basis data ini Anda dapat menanyakan waktu offset, dan kapan waktu musim panas aktif. Bukan hanya offset waktu, tetapi juga memberi Anda area, begitu banyak tempat pada garis lintang yang sama akan memiliki kode yang berbeda dan dapat mengubah aturan zona waktu mereka secara individual, dan perangkat lunak Anda akan dapat menanganinya.
Satu-satunya waktu ketika Anda perlu membuat perubahan dalam database Anda adalah ketika lokasi mengubah zona waktu miliknya, yang akan sangat jarang.
sumber
Praktik terbaik mutlak adalah menggunakan database yang mendukung
TIMESTAMP WITH TIMEZONE
tipe data yang didefinisikan oleh SQL99.SQL Server memiliki tipe yang disebut
datetimeoffset
yangTIMESTAMP WITH TIMEZONE
dapat melakukan segalanya kecuali menyimpan zona waktu yang sebenarnya. Yang dapat Anda lakukan adalah menyimpan offset dari UTC (misalnya,2013-05-04 12:34:56 -5:00
), yang berarti Anda harus menentukannya sebelum penyimpanan berdasarkan zona waktu.sumber
Dengan asumsi bahwa Anda menggunakan .Net framework 4.0 atau lebih tinggi, TimeZoneInfo adalah yang Anda butuhkan.
Simpan semua nilai tanggal dalam database dalam format UTC. Gunakan nilai ID atau hasil ToSerializedString () untuk setiap klien untuk membuat objek TimeZoneInfo untuk mengonversi tanggal yang disimpan ke format lokal untuk tampilan.
sumber
Anda mengatakan ingin menyimpan zona waktu untuk setiap alamat di DB, tetapi Anda belum mengatakan apa yang ingin Anda lakukan dengannya. Menyimpan sesuatu dalam DB jarang merupakan tujuan itu sendiri.
Dalam kasus apa pun saya akan mencari untuk menggunakan database TZ , alias database Olsen, baik secara langsung atau dengan menggunakan beberapa perangkat lunak rak yang mengintegrasikan TZ. Anda dapat menyimpan zona waktu hanya sebagai string untuk merujuk ke salah satu entri TZ DB , misalnya 'Afrika / Kampala' atau 'Eropa / Paris'.
sumber