Bekerja dengan zona waktu bisa jadi sulit! Faktanya, artikel ini terinspirasi oleh masalah yang saya alami dengan mereka. Saya akhirnya memutuskan untuk gigit jari dan melakukan penelitian ekstensif untuk memahaminya dengan benar. Saya menemukan bahwa mereka menjadi lebih mudah untuk dikerjakan ketika Anda memahami dasar-dasarnya. Ini adalah upaya saya, dengan meletakkan semua hal mendasar di satu tempat, untuk membantu orang lain yang bergumul dengan zona waktu. Ada juga solusi untuk beberapa masalah umum di bagian akhir.
Waktu Universal Terkoordinasi (UTC): Roti dan Mentega
Ini adalah hal pertama yang perlu kita pahami sebelum melihat zona waktu. UTC adalah standar waktu dunia. Ini berarti bahwa waktu di setiap belahan dunia lainnya ditentukan menggunakan UTC. Faktanya, waktu lokal di mana pun di dunia dapat diperoleh dengan menambahkan atau mengurangi offset dari UTC.
Misalnya, waktu di Nepal, tempat saya tinggal, selalu dapat diperoleh dengan menambahkan lima jam 45 menit ke waktu saat ini di UTC. Jadi waktu disini bisa dinyatakan sebagai UTC + 05: 45.
UTC sendiri merupakan waktu di wilayah Bumi yang garis bujurnya adalah 0 derajat. Wilayah ini dikenal sebagai meridian utama. Orang sering bingung dengan UTC sebagai zona waktu, tetapi UTC sendiri bukanlah zona waktu.
Apa Itu Zona Waktu?
Bumi berputar kira-kira 15 derajat per jam, sehingga dunia terbagi menjadi 360/15 = 24 zona waktu. Idenya adalah bahwa waktu dalam setiap interval 15 derajat akan selalu sama.
Waktu di zona waktu di sebelah kiri meridian utama dapat diperoleh dengan mengurangi offset dari UTC. Demikian pula, waktu di zona waktu di sebelah kanan dapat diperoleh dengan menambahkan offset ke UTC. Offset di setiap kawasan berbeda dari kawasan yang berdekatan tepat satu jam.
Daerah ini juga bisa disebut dengan sebuah nama. Misalnya, zona waktu yang mengamati tanpa offset dari UTC disebut GMT (Greenwich Mean Time). Contoh lainnya adalah EST (Eastern Standard Time) yang merupakan zona waktu dengan offset -5.
Semua ini lebih jelas tergambar pada gambar di bawah ini.

Namun, tidak sesederhana itu. Wilayah ini berada di negara dan wilayah yang berbeda atau terkadang hanya bersinggungan dengan sebagian wilayah suatu negara, sehingga zona waktu yang sebenarnya kami gunakan hanya berdasarkan wilayah tersebut secara longgar. Sebaliknya, mereka dipengaruhi oleh batas-batas negara dan wilayah. Jadi, ada lebih dari 24 zona waktu. Akibatnya, ada banyak zona waktu yang tidak memiliki perbedaan jam persis. Misalnya, St. John's, NFLD, di Kanada memiliki offset -03: 30.

Hal-hal penting yang perlu diambil dari ini adalah:
- Hanya karena dua bidang tanah terletak di wilayah bujur 15 derajat yang sama, ini tidak berarti bahwa kedua bidang tersebut memiliki zona waktu yang sama atau offset yang sama dari UTC.
- Dua zona waktu berbeda dapat memiliki offset yang sama dari UTC.
- Dua negara berbeda atau wilayahnya dapat berada dalam zona waktu yang sama.
- Dua kawasan di negara yang sama dapat berada di zona waktu yang berbeda.
Jenis-Jenis Waktu di Dunia
Saya tahu bahwa "tipe" waktu terdengar aneh. Ini hanya karena tidak ada nama yang lebih baik. Ada dua jenis waktu yang digunakan di seluruh dunia. Mereka adalah waktu musim panas dan waktu standar.
Waktu musim panas
“Waktu musim panas (DST) adalah praktik menyetel jam maju satu jam dari waktu standar selama bulan-bulan musim panas dan mundur lagi di musim gugur, untuk memanfaatkan cahaya matahari dengan lebih baik.” - timeanddate.com
Setiap kali suatu wilayah memulai waktu musim panas, zona waktunya akan berubah untuk mencerminkan hal ini. Misalnya, kawasan di Waktu Standar Tengah (CST) yang juga menerapkan pergeseran waktu siang hari akan berubah menjadi CDT (Waktu Musim Panas Tengah).
Waktu standar
Ini adalah waktu yang digunakan di suatu wilayah ketika waktu musim panas tidak digunakan. Ini adalah waktu yang kami gunakan untuk menentukan zona waktu.
Satu hal yang perlu diperhatikan adalah tidak semua kawasan yang menggunakan waktu standar yang sama atau berada di zona waktu yang sama akan menerapkan pergeseran waktu siang hari. Jadi, wilayah yang memiliki waktu lokal yang sama selama musim gugur (saat pergeseran waktu siang hari tidak diterapkan) mungkin memiliki waktu lokal yang berbeda selama musim panas (saat penghematan siang hari diterapkan).
Zona Waktu di Komputer
Kami melihat beberapa contoh zona waktu sebelumnya: EST, CST, CDT, dan GMT. Zona waktu ini didasarkan pada pembagian 15 derajat bujur dan tidak memperhitungkan pergeseran waktu siang hari. Kami juga melihat bahwa menentukan waktu di wilayah tertentu menjadi rumit karena pergeseran waktu siang hari. Karenanya, zona waktu berbasis bujur ini tidak dapat digunakan secara langsung untuk konversi waktu.
Solusi untuk masalah ini adalah database zona waktu yang disebut database zona waktu . Database ini memperlakukan zona waktu sebagai kawasan nasional daripada menggunakan zona waktu berbasis bujur. Zona waktu dalam database ini digabungkan dengan informasi tentang waktu musim panas bersama dengan waktu standar. Database ini adalah kunci untuk melakukan konversi waktu.
Misalnya, America / New_York adalah zona waktu dari database ini. Basis data berisi informasi penting berikut tentang zona waktu ini:
- Offset selama waktu standar (yaitu -05: 00). Ini sama dengan EST (Waktu Standar Timur).
- Offset selama waktu musim panas (yaitu -04: 00). Ini setara dengan EDT (Waktu Musim Panas Timur).
- Aturan tentang kapan harus bertransisi ke waktu musim panas dan sebaliknya
Sekarang kita dapat dengan mudah membayangkan menggabungkan informasi ini dengan waktu UTC untuk menghitung dan menampilkan waktu di zona waktu mana pun yang kita inginkan. Namun demikian, Anda harus selalu menggunakan pustaka yang khusus dibuat untuk bekerja dengan zona waktu, seperti Moment Timezone , karena membuat kode sendiri dapat menjadi tugas yang menakutkan.
Basis data zona waktu terus diperbarui, jadi sangat penting untuk selalu memperbarui basis data ini dalam aplikasi apa pun yang menggunakannya.
Stempel Waktu UNIX: Bagaimana Komputer Menyimpan Informasi Waktu
“Stempel waktu UNIX adalah cara untuk melacak waktu sebagai total detik yang berjalan. Hitungan ini dimulai pada Unix Epoch pada 1 Januari 1970 di UTC. Oleh karena itu, stempel waktu UNIX hanyalah jumlah detik antara tanggal tertentu dan Epoch Unix. ” - Stempel Waktu Unix
Stempel waktu UNIX tidak bergantung pada zona waktu. Ini berarti stempel waktu UNIX selalu sesuai dengan titik waktu dalam UTC. Untuk menyatakan waktu di zona waktu lain, Anda perlu menambahkan offset zona waktu tersebut ke stempel waktu UNIX. Jadi, sebagai aturan praktis, jika Anda perlu menyimpan waktu dalam zona waktu tertentu, maka Anda perlu menyimpan zona waktu yang ingin Anda wakili di samping stempel waktu UNIX.
Misalnya, dalam JavaScript, setiap kali kita menjalankan Date.now() atau (new Date()).valueOf(), maka kita akan mendapatkan cap waktu UNIX. Namun, jika kita menjalankan (new Date()).toString(), kita akan mendapatkan kembali string tanggal yang diimbangi dengan zona waktu yang diatur oleh sistem kita. String ini juga akan berisi informasi zona waktu.
Beberapa Masalah Umum yang Melibatkan Zona Waktu
Di bawah ini kita akan melihat beberapa masalah umum yang melibatkan zona waktu dan cara mengatasinya. Jangan ragu untuk melewati bagian ini jika Anda merasa sudah memahami cara mengatasi masalah ini.
Menampilkan waktu dalam zona waktu pengguna
Ini adalah tugas yang cukup umum di banyak aplikasi. Katakanlah kita memiliki persyaratan berikut:
- Kami sedang membangun jejaring sosial untuk anjing tempat pengguna dapat memposting gambar anjing mereka. Setiap posting ditandai dengan cap waktu ketika itu diposting. Sebut saja ini
post time. - Ketika beberapa pengguna lain melihat kiriman tersebut, mereka harus dapat melihat
post timegambar anjing tersebut. Inipost timeharus ditampilkan dalam zona waktu pemirsa.
Misalnya, jika saya memposting gambar anjing saya yang tidak ada pada pukul 22:00 waktu Nepal, maka seseorang yang melihat gambar di New York harus melihat pukul 11:15 sebagai waktu pengiriman ketika tidak ada perubahan cuaca di siang hari dan pukul 12:15. pm sebagai waktu posting ketika pergeseran waktu siang hari diamati (sumber konversi: TimeIs )
Larutan
Saat pengguna membuat postingan:
- Dapatkan tanggal UTC dari bagian belakang. Kebanyakan server back-end diatur ke GMT sebagai zona waktu secara default, jadi ini seharusnya tidak menjadi masalah. Anda juga dapat mengirim cap waktu dari bagian depan, tetapi bukan ide yang baik untuk mengandalkan klien jika Anda tidak perlu melakukannya.
- Jika database Anda mendukung tipe tanggal, maka simpan tanggal GMT yang diperoleh secara langsung. Jika tidak, maka konversikan ke stempel waktu UNIX dan simpan di database.
Saat penonton meminta postingan:
- Jika database Anda mendukung tipe tanggal, maka konversikan ke stempel waktu UNIX. Jika tidak, maka Anda telah menyimpan stempel waktu mentah dan dapat menggunakannya. Kirim cap waktu ini ke ujung depan.
- Perpustakaan tanggal ujung depan Anda (standar atau pihak ketiga) pasti akan diatur ke zona waktu sistem secara default dan memiliki metode untuk mendapatkan string tanggal yang relatif terhadap zona waktu sistem. Jika Anda hanya menggunakan pustaka tanggal untuk mengonversi stempel waktu menjadi string, maka cap waktu itu sudah berada di zona waktu pemirsa.
Menampilkan waktu di zona waktu lain
Katakanlah kita mengubah sedikit persyaratan untuk jaringan sosial anjing kita sebelumnya. Kami sekarang ingin menampilkan waktu posting di zona waktu pembuat.
Misalnya, jika saya memposting gambar anjing saya yang tidak ada pada pukul 22:00 waktu Nepal, maka seseorang yang melihat gambar di New York harus melihat pukul 22:00 dari Asia / Kathmandu sebagai waktu posting. Di sini, Asia / Kathmandu adalah zona waktu Nepal.
Perhatikan bahwa contoh ini juga berlaku jika kami ingin menampilkan informasi tanggal dan waktu di zona waktu mana pun selain zona waktu sistem pemirsa.
Larutan
Saat pengguna membuat postingan:
Yang ini tidak sesederhana yang sebelumnya. Kami sekarang membutuhkan cara untuk mengetahui di zona waktu mana pengguna berada.
- Sebagian besar pustaka tanggal memiliki metode untuk memberi kita offset UTC. Tetapi tidak semuanya memiliki metode yang memberi kita nama zona waktu yang tepat. Namun, beberapa pustaka tanggal akan memiliki metode untuk menebak zona waktunya. Tebakan ini mungkin salah dalam beberapa kasus, tetapi terkadang itulah yang terbaik yang dapat Anda lakukan.
- Bagaimanapun, setelah kita menentukan zona waktu di ujung depan, kita perlu mengirimnya ke ujung belakang dan menyimpan zona waktu bersama dengan tanggal dan cap waktu UTC, seperti pada langkah sebelumnya.
- Jika aplikasi kita tidak perlu menampilkan nama zona waktu, maka kita tinggal menyimpan offsetnya.
- Bukan ide yang baik untuk mengurai waktu sebagai string dan menyimpan string karena akan menyulitkan pencarian database
post time.
Sebagai contoh:
- Di JavaScript,
new Date().getTimezoneOffset()akan memberi kita perbedaan antara waktu lokal dan UTC dalam menit, yang dapat kita gunakan untuk menentukan offset. Namun, informasi ini saja tidak akan memberi tahu kami tentang zona waktunya. Ini karena beberapa zona waktu dapat memiliki offset yang sama dan pengguna bahkan dapat berada di wilayah dengan waktu musim panas. - JavaScript juga mendukung
Intl.DateTimeFormat().resolvedOptions().timeZoneyang akan memberi kita nama zona waktu. Namun, ini tidak akan berfungsi di browser lama. - Moment Timezone, pustaka tanggal populer untuk JavaScript, memiliki metode
moment.tz.guess()yang akan menebak di zona waktu mana pengguna berada. Kabar baiknya adalah ia akan menggunakanIntl.DateTimeFormatmetode yang telah kita diskusikan sebelumnya jika browser mendukungnya.
Saat penonton meminta postingan:
- Jika database kita mendukung tipe tanggal atau jika kita menyimpan stempel waktu mentah, maka kita dapat menggunakan perpustakaan tanggal yang mendukung zona waktu, seperti zona waktu Moment, untuk mengubahnya menjadi zona waktu poster. Ingatlah bahwa kami menyimpan zona waktu poster di langkah sebelumnya.
- Kali ini kami akan mengirimkan tanggal aktual yang diubah menjadi string ke ujung depan dan langsung menampilkannya. Kita dapat menggunakan pustaka zona waktu untuk melakukan konversi di bagian depan, tetapi pustaka ini biasanya besar karena informasi zona waktu yang mereka bawa dan akan meningkatkan waktu muat aplikasi kita.
- Perhatikan bahwa kami juga dapat melakukan ini tanpa menggunakan pustaka pihak ketiga hanya dengan menambahkan offset zona waktu poster ke stempel waktu asli kami dan kemudian mengubahnya menjadi string tanggal UTC. Namun, kita harus mendapatkan offset dari ujung depan dan menyimpannya di setiap kiriman. Ini karena kita perlu memperhitungkan waktu musim panas jika kita tidak menyimpan offset saat setiap posting dibuat. Ini bukan masalah pada contoh sebelumnya karena Moment Timezone akan menanganinya untuk kita.
Mengonversi waktu dari satu zona waktu ke zona waktu lainnya
Judul contoh ini agak menyesatkan. Sebenarnya, tidak ada “pengubahan” waktu yang sebenarnya dari satu zona waktu ke zona waktu lainnya. Seperti yang kita pelajari sebelumnya, waktu dapat diekspresikan dengan menggunakan stempel waktu UNIX, yang selalu dalam UTC. Jadi kami hanya dapat menampilkan waktu relatif terhadap zona waktu yang berbeda daripada "mengubah" waktu dari satu zona waktu ke zona waktu lainnya. Jika kami selalu menyimpan cap waktu UNIX, maka tidak perlu melakukan konversi sama sekali. Kami hanya perlu menampilkan waktu di zona waktu target.
Namun, jika kita tidak memiliki stempel waktu UNIX melainkan memiliki string tanggal dalam format tanggal standar (Misalnya, MM / DD / YYYY HH: MM: SS) yang kita tahu relatif terhadap beberapa zona waktu, maka kita dapat dengan mudah ekstrak stempel waktu UNIX darinya. Kami kemudian dapat menggunakan cap waktu ini untuk membuat string tanggal di zona waktu lain.
Ini mungkin tampak mudah dilakukan jika kita memikirkannya dalam istilah offset UTC. Yang perlu kita lakukan adalah mengurangi offset zona waktu sumber dari UTC dan menambahkan offset zona waktu target ke hasilnya. Namun, masalahnya di sini adalah kita perlu memperhitungkan waktu musim panas. Untuk mengatasi masalah ini, kita perlu menggunakan database zona waktu. Tugas ini memerlukan banyak hal rumit, jadi kita harus selalu menggunakan perpustakaan saat menampilkan cap waktu UNIX sebagai string tanggal relatif terhadap beberapa zona waktu. Perpustakaan akan melakukan langkah-langkah di atas untuk Anda sambil memperhitungkan penghematan siang hari.

