Zon Masa dan Offset dan ObjectScript, Oh My!
Misi anda
Mari kita berpura-pura sejenak bahawa anda seorang pengintip tindakan antarabangsa yang mengabdikan hidup anda untuk memastikan penduduk dunia selamat daripada bahaya. Anda menerima misi berikut:
Selamat hari, Ejen IRIS,
Kami memohon maaf kerana mengganggu percutian anda di Bahamas, tetapi kami baru sahaja menerima berita daripada ejen London kami bahawa "bom jangka" akan meletup di kawasan berpenduduk tinggi di Los Angeles. Sumber kami mengatakan bahawa "bom jangka" ditetapkan untuk dicetuskan pada pukul 3:14 petang ini.
Cepat, orang ramai mengharapkan anda!
Masalahnya
Anda bergegas berdiri dan bersiap sedia untuk menuju ke Los Angeles, tetapi anda dengan cepat menyedari bahawa anda kehilangan maklumat penting; adakah "bom jangka" akan dicetuskan pada 3:14 PM waktu Bahama atau pada 3:14 PM waktu Los Angeles? ...atau mungkin 3:14 PM waktu London.
Anda dengan cepat menyedari bahawa masa yang diberikan kepada anda (3:14 PM) tidak memberi anda maklumat yang mencukupi untuk menentukan bila anda perlu berada di Los Angeles.
Masa yang diberikan kepada anda (3:14 PM) adalah kabur. Anda memerlukan lebih banyak maklumat untuk menentukan masa tepat.
Beberapa Penyelesaian
Semasa anda memikirkan masalah itu, anda menyedari terdapat kaedah untuk mengatasi kekaburan masa yang diberikan kepada anda:
Sumber anda mungkin memberikan lokasi yang menunjukkan waktu tempatan adalah 3:14 PM. Contohnya, Los Angeles, Bahamas atau London.
Sumber anda mungkin menggunakan piawaian seperti UTC (Waktu Sejagat Selaras) untuk memberikan anda offset dari lokasi yang dipersetujui (seperti Greenwich, London).
Pengakhiran yang Bahagia
Anda menghubungi sumber anda dan mengesahkan bahawa masa yang diberikan sememangnya 3:14 PM waktu Los Angeles. Anda boleh pergi ke Los Angeles, melucutkan senjata "bom jangka" sebelum 3:14 PM dan kembali ke Bahamas dengan cepat untuk menamatkan percutian anda.
Titik
Jadi, apa gunanya latihan berfikir ini? Saya ragu bahawa mana-mana daripada kita akan menghadapi masalah yang dibentangkan di atas, tetapi jika anda bekerja dengan aplikasi atau kod yang memindahkan data dari satu lokasi ke lokasi lain (terutamanya jika lokasi berada dalam zon waktu yang berbeza), anda perlu sedar cara mengendalikan masa tarikh dan zon masa.
Zon Masa adalah SUKAR!
Nah, zon waktu tidak begitu teruk. Waktu penjimatan siang dan sempadan politik menyukarkan zon waktu.
Saya fikir saya sentiasa memahami idea "umum" zon waktu: planet ini terbahagi kepada kepingan menegak mengikut zon waktu, di mana setiap zon waktu adalah satu jam di belakang zon waktu ke Timur.
Walaupun pemudahan ini berlaku untuk banyak lokasi, malangnya terdapat banyak pengecualian untuk peraturan ini.
Rujukan: Zon waktu dunia (Wikipedia)
Penyeragaman dengan UTC ("Asal")
Untuk memudahkan bahasa menyampaikan masa tertentu, dunia telah menetapkan penggunaan UTC (Waktu Sejagat Selaras). Piawaian ini menetapkan "asal" kepada longitud 0° yang melalui Greenwich, London.
Mentakrifkan "Offset"
Menggunakan UTC sebagai asas, semua zon waktu lain boleh ditakrifkan secara relatif kepada UTC. Hubungan ini dirujuk sebagai offset UTC.
Jika anda mempunyai waktu tempatan dan offset, anda tidak lagi mempunyai masa yang samar-samar (seperti yang dilihat dalam contoh pengintip kami di atas); anda mempunyai masa yang pasti dan khusus tanpa kesamaran.
Format biasa yang digunakan untuk menunjukkan offset UTC ialah ±HHMM[SS[.ffffff]].
- Tanda tolak - menunjukkan offset ke Barat UTC.
- Tanda tambah menunjukkan offset ke Timur UTC.
- HH menunjukkan jam (berlapik sifar)
- MM menunjukkan minit (berlapik sifar)
- SS menunjukkan saat (berlapik sifar)
- .ffffff menunjukkan saat pecahan
Sebagai contoh, di Amerika, Zon Zime Standard Timur (EST) ditakrifkan sebagai -0500 UTC. Ini bermakna semua lokasi di EST adalah 5 jam di belakang UTC. Jika masa ialah 9:00 PM di UTC, maka waktu tempatan di EST ialah 4:00 PM.
Di Australian Central Western Standard Time Zone (ACWST), offset ditakrifkan sebagai 0845 UTC. Jika masa ialah 1:00 PG di UTC, maka waktu tempatan di ACWST ialah 9:45 PG.
Waktu Penjimatan Siang
Jadi, kembali kepada peta zon waktu di atas. Daripada imej, anda dapat melihat bahawa banyak zon waktu mengikut sempadan politik negara dan wilayah. Ini merumitkan sedikit pengiraan zon waktu, tetapi ia cukup mudah untuk menyelubungi fikiran anda.
Malangnya, terdapat satu lagi faktor yang perlu dipertimbangkan apabila bekerja dengan masa dan zon waktu.
Jom tengok Los Angeles.
Pada peta, ofset UTC untuk Los Angeles ialah -8 dalam Masa Standard. Waktu Standard biasanya diikuti semasa bulan-bulan musim sejuk, manakala Waktu Penjimatan Siang lazimnya diikuti semasa bulan-bulan musim panas.
Waktu Penjimatan Siang (DST) memajukan jam dalam zon waktu memberi ke hadapan (biasanya satu jam pada bulan-bulan musim panas). Terdapat beberapa sebab kawasan politik mungkin memilih untuk mengikuti DST (seperti penjimatan tenaga, penggunaan siang yang lebih baik, dsb.). Kesukaran dan kerumitan Waktu Penjimatan Siang ialah DST tidak diikuti secara konsisten di seluruh dunia. Bergantung pada lokasi anda, wilayah anda mungkin mengikuti DST atau tidak.
Pangkalan Data Zon Waktu
Memandangkan gabungan sempadan politik dan Waktu Jimat Siang meningkatkan kerumitan menentukan masa tertentu, pangkalan data zon waktu diperlukan untuk memetakan waktu tempatan dengan betul kepada masa tertentu berbanding UTC. Pangkalan Data Zon Waktu Internet Assigned Numbers Authority (IANA) ialah sumber biasa maklumat zon waktu yang digunakan oleh sistem pengendalian dan bahasa pengaturcaraan.
Pangkalan data termasuk nama dan alias semua zon waktu, maklumat tentang offset, maklumat tentang penggunaan Waktu Penjimatan Siang, singkatan zon waktu dan julat tarikh yang pelbagai peraturan dikenakan.
Salinan dan maklumat tentang pangkalan data zon waktu boleh didapati di tapak web IANA.
Kebanyakan sistem UNIX mempunyai salinan pangkalan data yang dikemas kini dengan pengurus pakej sistem pengendalian (biasanya dipasang dalam /usr/share/zoneinfo). Sesetengah bahasa pengaturcaraan mempunyai pangkalan data terbina dalam. Orang lain menyediakannya oleh perpustakaan atau boleh membaca salinan pangkalan data sistem.
Nama/Pengecam Zon Masa
Pangkalan data zon waktu mengandungi banyak nama dan alias untuk zon waktu tertentu. Kebanyakan penyertaan termasuk negara (atau benua) dan bandar utama dalam nama. Contohnya:
- Amerika/New_York
- Amerika/Los_Angeles
- Eropah/Rom
- Australia/Melbourne
Penukaran dan Pemformatan Menggunakan ObjectScript
Jadi, sekarang kita tahu tentang:
- Masa tempatan (masa samar-samar tanpa offset atau lokasi)
- Mengimbangi UTC (mengimbangi relatif cap waktu atau lokasi adalah daripada "asal" UTC di Greenwich, London)
- Waktu Penjimatan Siang (percubaan untuk membantu tamadun dengan mengorbankan pengimbangan zon waktu)
- Pangkalan data zon waktu (yang termasuk maklumat tentang zon waktu dan pematuhan Penjimatan Siang di banyak lokasi dan wilayah)
Mengetahui perkara ini, bagaimana kita boleh bekerja dengan tarikh masa/zon masa dalam ObjectScript?
***Nota: Saya percaya semua pernyataan berikut adalah benar tentang ObjectScript, tetapi sila beritahu saya jika saya salah nyatakan cara ObjectScript berfungsi dengan zon waktu dan offset.
Pembolehubah dan Fungsi Terbina dalam
Jika anda perlu menukar cap masa antara pelbagai format dalam zon waktu sistem proses yang menjalankan IRIS, ciri terbina dalam ObjectScript sepatutnya mencukupi. Berikut ialah senarai ringkas pelbagai pembolehubah/fungsi berkaitan masa dalam ObjectScript:
-
$ZTIMESTAMP / $ZTS
- Format dalaman IRIS sebagai nilai UTC (offset 0000).
- Format: ddddd,sssss.fffffff
-
$NOW(tzmins)
- Waktu tempatan sistem semasa dengan tzmin yang diberikan diimbangi daripada UTC.
- Tidak mengambil kira Waktu Penjimatan Siang.
- Secara lalai, tzmins adalah berdasarkan pembolehubah $ZTIMEZONE.
- Format: ddddd,sssss.fffffff
-
$HOROLOG
- Waktu tempatan sistem semasa (berdasarkan $ZTIMEZONE), mengambil kira Waktu Penjimatan Siang.
- Format: ddddd,sssss.fffffff
-
$ZTIMEZONE
- Mengembalikan atau menetapkan offset UTC tempatan sistem dalam beberapa minit.
-
$ZDATETIME() / $ZDT()
- Menukar format $HOROLOG kepada format paparan tertentu.
- Boleh digunakan untuk menukar daripada waktu tempatan sistem kepada UTC ( 0000).
-
$ZDATETIMEH() / $ZDTH()
- Menukar rentetan datetime kepada format $HOROLOG dalaman.
- Boleh digunakan untuk menukar daripada UTC ( 0000) kepada sistem waktu tempatan.
Sebaik yang saya tahu, fungsi ini hanya dapat memanipulasi masa tarikh menggunakan zon masa sistem tempatan. Nampaknya tidak ada cara untuk bekerja dengan zon waktu sewenang-wenang dalam ObjectScript.
Masukkan Pustaka tz pada Open Exchange
Untuk menampung penukaran ke dan dari zon waktu sewenang-wenangnya, saya berusaha untuk mencipta tz - Pustaka Penukaran Zon Masa ObjectScript.
Pustaka ini mengakses pangkalan data zon waktu yang dipasang pada sistem anda untuk menyediakan sokongan untuk menukar cap masa antara zon waktu dan format.
Sebagai contoh, jika anda mempunyai masa setempat ke Los Angeles (America/Los_Angeles), anda boleh menukarnya kepada zon waktu yang digunakan di Bahamas (Amerika/New_York) atau zon waktu yang digunakan di London (Eropah/London):
USER>zw ##class(tz.Ens).TZ("2024-12-20 3:14 PM", "America/Los_Angeles", "America/New_York") "2024-12-20 06:14 PM" USER>zw ##class(tz.Ens).TZ("2024-12-20 3:14 PM", "America/Los_Angeles", "Europe/London") "2024-12-20 11:14 PM"
Jika anda diberi cap masa dengan ofset, anda boleh menukarnya kepada waktu tempatan di Eucla, Australia (Australia/Eucla), walaupun anda tidak tahu zon waktu asal:
USER>zw ##class(tz.Ens).TZ("2024-12-20 08:00 PM -0500", "Australia/Eucla") "2024-12-21 09:45 AM +0845"
Jika anda menggunakan mesej HL7, pustaka tz mempunyai beberapa kaedah yang terdedah kepada Peraturan Kebolehoperasian dan DTL untuk membantu anda menukar dengan mudah antara zon waktu, waktu tempatan, masa dengan offset, dsb.:
// Convert local time from one time zone to another set datetime = "20240102033045" set newDatetime = ##class(tz.Ens).TZ(datetime,"America/New_York","America/Chicago") // Convert local time to offset set datetime = "20240102033045" set newDatetime = ##class(tz.Ens).TZOffset(datetime,"America/Chicago","America/New_York") // Convert offset to local time set datetime = "20240102033045-0500" set newDatetime = ##class(tz.Ens).TZLocal(datetime,"America/Chicago") // Convert to a non-HL7 format set datetime = "20240102033045-0500" set newDatetime = ##class(tz.Ens).TZ(datetime,"America/Chicago",,"%m/%d/%Y %H:%M:%S %z")
Ringkasan
Saya menghargai anda mengikuti saya dalam "perjalanan antarabangsa" ini di mana kami menemui zon waktu, Waktu Penjimatan Siang, peta dunia dan "bom jangka". Mudah-mudahan, ini dapat menjelaskan (dan memudahkan) banyak kerumitan bekerja dengan masa tarikh dan zon waktu.
Lihat tz - Pustaka Penukaran Zon Masa ObjectScript dan beritahu saya jika anda mempunyai sebarang soalan (atau pembetulan/penjelasan kepada sesuatu yang saya katakan).
Terima kasih!
Rujukan/Pautan Menarik
- https://ms.wikipedia.org/wiki/Coordinated_Universal_Time
- https://ms.wikipedia.org/wiki/Zon_Masa
- https://ms.wikipedia.org/wiki/Daylight_saving_time
- https://www.worldtimeserver.com/learn/unusual-time-zones/
- https://www.worldtimeserver.com/learn/history-of-time-zones/
- https://www.worldtimeserver.com/learn/what-is-a-time-zone/
- https://ms.wikipedia.org/wiki/Tz_database
- https://ms.wikipedia.org/wiki/List_of_tz_database_time_zones
- https://ms.wikipedia.org/wiki/Internet_Assigned_Numbers_Authority
- https://www.iana.org/time-zones
- https://www.gnu.org/software/libc/manual/html_node/Calendar-Time.html
Atas ialah kandungan terperinci Zon Masa dan Offset dan ObjectScript, Oh My!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Penyelesaian kepada Isu Kebenaran Semasa Melihat Versi Python di Terminal Linux Apabila anda cuba melihat versi Python di Terminal Linux, masukkan Python ...

Cara mengelakkan dikesan semasa menggunakan fiddlerevery di mana untuk bacaan lelaki-dalam-pertengahan apabila anda menggunakan fiddlerevery di mana ...

Apabila menggunakan Perpustakaan Pandas Python, bagaimana untuk menyalin seluruh lajur antara dua data data dengan struktur yang berbeza adalah masalah biasa. Katakan kita mempunyai dua DAT ...

Bagaimanakah Uvicorn terus mendengar permintaan HTTP? Uvicorn adalah pelayan web ringan berdasarkan ASGI. Salah satu fungsi terasnya ialah mendengar permintaan HTTP dan teruskan ...

Fastapi ...

Menggunakan Python di Terminal Linux ...

Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam masa 10 jam? Sekiranya anda hanya mempunyai 10 jam untuk mengajar pemula komputer beberapa pengetahuan pengaturcaraan, apa yang akan anda pilih untuk mengajar ...

Memahami Strategi Anti-Crawling of Investing.com Ramai orang sering cuba merangkak data berita dari Investing.com (https://cn.investing.com/news/latest-news) ...
