Pada kesempatan kali ini saya akan menjelaskan penanganan beberapa zona waktu di MySQL. Saya akan memandu teman-teman melalui beberapa pertimbangan yang mendasar untuk bekerja dengan data date dan time-related di MySQL. Teman-teman juga akan melihat bagaimana menangani beberapa zona waktu dan perubahan waktu siang hari.

Pembahasan di sini beberapa konsep inti yang akan membantu kita memahami kompleksitas data time-related yang mendasarinya. Penting untuk diperhatikan bahwa konsep-konsep ini berlaku bila mewakili suatu titik waktu daripada durasi absolut.

Pengantar

Sebelum saya berbicara tentang penggunaan data tanggal dan waktu di MySQL, sebaiknya teman-teman tinjau bagaimana zona waktu bekerja. Teman-teman akan mulai dengan referensi waktu standar.

Referensi Waktu Standar: UTC

Karena waktu perlu diketahui dan dikoordinasikan di seluruh dunia, Coordinated Universal Time (UTC), digunakan sebagai referensi waktu absolut standar. UTC berevolusi dari Greenwich Mean Time (GMT) untuk digunakan sebagai standar dan dikelola oleh Bureau International des Poids et Mesures di Paris.

UTC diperoleh dengan menerapkan satu set algoritma ke sekitar 250 jam cesium dan pemeras hidrogen di sekitar 65 laboratorium berbeda di seluruh dunia. Perkiraan waktu UTC secara real-time dihitung dan disediakan oleh berbagai pusat, seperti Observatorium Angkatan Laut Amerika Serikat dan Institut Nasional Standar dan Teknologi.

Dari titik referensi ini, setiap zona waktu memperoleh waktu setempat yang diwakili sebagai offset dari UTC. Misalnya, Zona Waktu Eropa Tengah didefinisikan sebagai UTC + 1: 00. Jadi waktu setempat untuk wilayah ini adalah waktu UTC yang sekarang ditambah satu jam.

Apakah UTC Sama seperti GMT ?

Bila referensi waktu asli harus didefinisikan, disepakati untuk membuatnya relatif terhadap titik tertentu di bumi. Greenwich, sebuah wilayah di London yang merupakan rumah bagi meridian utama (0o bujur) dipilih sebagai titik ini. Jadi siang GMT adalah saat ketika matahari berada pada titik tertinggi di atas Meridian Greenwich. Saat ini, GMT saat ini digunakan sebagai zona waktu yang tidak memiliki offset dari UTC.

UTC adalah referensi waktu; GMT adalah zona waktu. Tidak ada tempat di bumi yang menggunakan UTC sebagai zona waktu resmi; GMT digunakan sebagai zona waktu di Inggris dan di beberapa bagian Afrika. Secara praktis, waktu GMT setara dengan waktu UTC (GMT = UTC + 0). Sebenarnya, referensi waktu saat ini bukan GMT tapi UTC.

Zona Waktu dan Waktu Lokal

Zona waktu adalah wilayah dunia yang mengamati waktu standar yang seragam. Zona waktu pada dasarnya merupakan offset UTC, namun mungkin juga akan mengalami perubahan tambahan selama Daylight Saving Time:

Setiap zona, negara, atau wilayah mungkin memiliki zona waktu yang berubah dari waktu ke waktu (misalnya alasan geopolitik) dan IANA mencatat hal ini di database publik yang digunakan di banyak sistem perangkat lunak. Dalam kasus ini, zona waktu biasanya dinamai berdasarkan pola regional / lokasi seperti Amerika / Indiana / Knox, Australia / Melbourne, dll.

Waktu setempat dihitung dengan menerapkan zona waktu regional yang diimbangi dengan waktu UTC. Misalnya, untuk menghitung waktu setempat di Buenos Aires, Argentina, saya menerapkan offset untuk Argentina ke waktu UTC saat ini. Jika UTC adalah 16:19 dan America / Buenos_Aires adalah UTC-3, waktu setempat saya adalah 13:19. Perlu dicatat bahwa sejak UTC adalah referensi waktu absolut, tidak terpengaruh oleh DST. Apa yang terpengaruh oleh DST adalah offset lokal.

Zona Waktu dan Waktu Offset Bukanlah Hal yang Sama

Hal ini karena offset untuk zona waktu tertentu mungkin berubah. Mari kita ambil Los Angeles, California sebagai contohnya. Los Angeles berada di zona waktu IANA Amerika / Los_Angeles. Ini memiliki offset UTC-7 selama DST, namun offset UTC-8 untuk waktu standar. Perubahan offset, tapi batas zona waktu sama. Namun, tempat lain, seperti negara bagian Arizona, tidak mengikuti DST; Offset mereka tidak berubah.

Jadi apa masalahnya? 

Saat menyimpan data waktu dan tanggal, tingkat kerumitan sangat bergantung pada apa yang perlu Anda lakukan dengannya dalam hal pengambilan, manipulasi, dan tampilan front-end. Sebelum teman-teman mulai merancang sesuatu, tanyakan pada diri teman-teman:

Apakah data ini mewakili suatu titik waktu di masa lalu atau di masa depan? 

Jika itu merupakan titik di masa lalu, offset untuk zona waktu sudah terjadi dan sudah diketahui. Untuk poin di masa depan, offset ini bisa berubah – DST bisa mulai berlaku atau bahkan berubah. Katakan bahwa teman-teman ingin menyimpan tanggal dan waktu musim panas di masa depan untuk Los Angeles, seperti siang hari pada tanggal 13 April 2060 (2060-04-13 19:00 UTC). Menurut proyeksi saat ini, DST dimulai pada pukul 02:00 hari itu, jadi tanggal dan waktu ini memiliki offset -7h karena DTS.

Tapi, mari teman-teman bayangkan tahun depan (2017), mereka memutuskan untuk memulai DST suatu hari nanti di California (ya DST sendiri tidak tetap dan bisa berubah seiring berjalannya waktu). Jadi jika tahun depan saya harus memilih titik waktu yang sama (2060-04-13 19:00 UTC), waktu setempat sebenarnya adalah 2060-04-13 11:00 karena DST belum akan menendangnya.

Sampai di sini penjelasan saya mengenai penanganan beberapa zona waktu di MySQL part1, dan akan saya lanjut pada

Untuk pembahasan selanjutnya, akan saya jelaskan mengenai penanganan beberapa zona waktu di MySQL part-2, di sesi berikutnya, semoga bermanfaat.