Pertama, ketahuilah bahwa dalam terminologi modern Anda harus mengatakan UTC, bukan GMT. Mereka sebagian besar setara, kecuali bahwa UTC didefinisikan lebih tepat. Cadangan istilah GMT untuk merujuk ke bagian zona waktu di Inggris Raya yang berlaku selama bulan-bulan musim dingin dengan offset UTC+0.
Sekarang untuk pertanyaan Anda. UTC belum tentu merupakan cara terbaik untuk menyimpan semua nilai tanggal dan waktu. Ini bekerja sangat baik untuk masa lalu peristiwa, atau untuk masa depan mutlak acara, tetapi tidak berfungsi dengan baik untuk lokal mendatang acara - terutama berulang di masa mendatang acara.
Saya menulis tentang ini pada jawaban lain baru-baru ini, dan merupakan salah satu dari sedikit kasus pengecualian di mana waktu lokal lebih masuk akal daripada UTC. Argumen utama adalah "masalah jam alarm". Jika Anda menyetel jam alarm dengan UTC, Anda akan bangun satu jam lebih awal atau terlambat pada hari transisi DST. Inilah sebabnya mengapa kebanyakan orang menyetel jam alarm mereka berdasarkan waktu setempat.
Tentu saja, Anda tidak bisa hanya simpan waktu lokal jika Anda bekerja dengan data dari seluruh dunia. Anda harus menyimpan beberapa hal yang berbeda:
- Waktu lokal acara rutin, seperti "08:00"
- Zona waktu tempat waktu lokal dinyatakan, seperti "Amerika/New_York"
- Pola pengulangan, dalam format apa pun yang sesuai untuk aplikasi Anda, seperti harian, dua mingguan, atau Kamis ketiga setiap bulan, dll.
- Berikutnya segera Tanggal dan waktu UTC setara, dengan yang terbaik yang dapat Anda proyeksikan.
- Mungkin, tetapi tidak selalu, daftar tanggal dan waktu UTC acara mendatang, memproyeksikan beberapa periode yang telah ditentukan sebelumnya ke masa depan (mungkin seminggu, mungkin 6 bulan, mungkin satu atau dua tahun, tergantung kebutuhan Anda).
Untuk dua yang terakhir, pahami bahwa UTC yang setara dengan tanggal/waktu lokal mana pun dapat berubah jika pemerintah yang bertanggung jawab atas zona waktu tersebut memutuskan untuk mengubah apa pun. Karena ada beberapa pembaruan basis data zona waktu setiap tahun, Anda harus memiliki rencana untuk berlangganan pengumuman pembaruan dan perbarui basis data zona waktu Anda secara teratur. Setiap kali Anda memperbarui data zona waktu, Anda harus menghitung ulang waktu setara UTC untuk semua acara mendatang.
Memiliki padanan UTC penting jika Anda berencana untuk menampilkan segala jenis daftar acara yang mencakup lebih dari satu zona waktu. Itu adalah nilai yang akan Anda minta untuk membuat daftar itu.
Hal lain yang perlu dipertimbangkan adalah bahwa jika suatu acara dijadwalkan untuk waktu lokal yang terjadi selama transisi mundur DST, Anda harus memutuskan apakah acara tersebut terjadi pada contoh pertama (biasanya), atau contoh kedua (kadang-kadang), atau keduanya (jarang), dan kembangkan ke dalam aplikasi Anda sebuah mekanisme untuk memastikan acara tidak diaktifkan dua kali kecuali Anda menginginkannya.
Jika Anda mencari jawaban sederhana - maaf, tetapi tidak ada. Menjadwalkan acara mendatang di seluruh zona waktu adalah tugas yang rumit.
Pendekatan Alternatif
Saya memiliki beberapa orang yang menunjukkan kepada saya teknik di mana mereka melakukannya gunakan waktu UTC untuk penjadwalan, yaitu mereka memilih tanggal mulai dalam waktu lokal, mengubahnya menjadi UTC untuk disimpan, dan juga menyimpan ID zona waktu. Kemudian saat runtime, mereka menerapkan zona waktu untuk mengubah waktu UTC asli kembali ke waktu lokal, kemudian menggunakan waktu lokal itu untuk menghitung pengulangan lainnya, seolah-olah itu adalah yang awalnya disimpan seperti di atas.
Sementara teknik ini akan berhasil , kekurangannya adalah:
-
Jika ada pembaruan zona waktu yang mengubah waktu lokal sebelum instance pertama dijalankan, seluruh jadwal akan dibatalkan. Ini dapat dikurangi dengan memilih waktu di masa lalu untuk instance "pertama", sehingga instance kedua benar-benar yang pertama.
-
Jika waktunya benar-benar "waktu mengambang" yang harus mengikuti pengguna di sekitar (seperti pada jam alarm di ponsel), Anda masih harus menyimpan informasi zona waktu untuk zona yang awalnya dibuat - bahkan jika itu bukan zona tempat Anda ingin berlari.
-
Ini menambah kerumitan tambahan tanpa manfaat apa pun. Saya akan mencadangkan teknik ini untuk situasi di mana Anda mungkin memiliki penjadwal khusus UTC yang Anda coba perkuat dukungan zona waktu.