SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
Časové zóny v
single-page
aplikaci s .NET
backendem.
Barbora Najmanová
Zbyněk Hanák
• Příběh Connie
• Trocha neškodné teorie času
• Databáze časových zón
• Příklad praktické implementace
Agenda
User story.
• Práce v mezinárodních týmech
• Nastavování publikace na později pro stránky po
celém světě
Proč uživatel
potřebuje měnit
časovou zónu?
Fyzický čas
Civilní čas
Ďábel je ukryt v čase.
• UTC – Koordinovaný světový čas
• Unix integer timestamp – 1662391423
• UTC string timestamp (ISO-8601) – 2022-09-13T10:15:00Z
• Formát data a času (dd.MM.yyyy)
• Systém kalendáře
• Časové pásmo
Časové zóny.
Časové
pásmo
Standardní
čas
Místní
čas
Time zone Time zone Time zone
Časová pásma.
Časové pásmo je ta část Země, která
používá stejný standardní čas.
Časové pásmo úzce chápeme jako
UTC offset.
počítačem náhodně vygenerovaný Product Manager
Vždyť je to jeden dropdown a dvacet čtyři
položek. Co na tom budete dělat dva měsíce?”
Standardní čas.
Standardní čas je místní čas ve státě
nebo oblasti v období, kdy neplatí
sezónní změny času.
EST Eastern Standard Time UTC -05:00
CET Central European Time UTC +01:00
AEST Australian Eastern Standard Time UTC +10:00
Standardní čas.
A drobné problémy s ním.
CST Central Standard Time UTC -06:00
CST China Standard Time UTC +08:00
CST Cuba Standard Time UTC -05:00
Nejednoznačný systém zkratek
AEST Australian Eastern Standard Time UTC +10:00
AEDT Australian Eastern Daylight Saving
Time
UTC +11:00
Sezónní změny času
Standardní čas.
A drobné problémy s ním.
UTC offset a sezónní změny času v Austrálii
Co jste si (možná)
mysleli
o letním čase?
Letní čas začíná a končí všude
ve stejnou dobu.
Letní čas v dané zemi začíná a končí vždy
ve stejnou dobu.
V celé zemi se buďto používá nebo
nepoužívá letní čas.
No tak aspoň v daném státě, regionu
nebo oblasti!
Ale přidává se vždycky hodina navíc, že?
Místní čas.
Místní čas je spjatý s konkrétním
místem, které zachovává konzistenci a
kontinuitu pravidel pro sledování času.
• America/New_York
• Europe/Prague
• Australia/Sydney
Databáze časových zón.
Europe/Prague
Kolaborativní projekt, který
shromažďuje a publikuje
informace o změnách ve
sledování světového času.
Distribuce prostřednictvím
textových souborů
IANA tz database
Central European Time
Windows registr
HKEY_LOCAL_MACHINESOFTWAREMicrosof
tWindows NTCurrentVersionTime
Zones
.NET
TimeZoneInfo.GetSystemTimeZones
Win32
EnumDynamicTimeZoneInformation
MS Windows TZ DB
Databáze časových zón.
+ udržovaná komunitou
+ udržuje historické změny (od 1970)
+ jednoznačné místní identifikátory
+ velmi rozšířená (Unicode CLDR,
Unix, Linux, macOS, iOS, Android, JRE,
PHP, JavaScript Intl API)
- velké množství identifikátorů
IANA tz database
+ nativní podpora, pokud vyvíjíte
aplikace pro MS prostředí
- neudržuje mnoho historických změn
- nejednoznačné identifikátory, příliš
široce definované
Arab Standard Time +3:00
Arabian Standard Time +4:00
- displayName zobrazuje vždy pouze
standardní UTC offset
MS Windows TZ DB
IANA tz database.
Postřehy z praktické
implementace.
Architektura Kontent.ai.
• Seznam identifikátorů
• Výchozí místní čas
• Informace o UTC offsetu
Co nás
čekalo vyřešit
na frontendu?
Intl API
• ECMAScript Internationalization API
• Poskytuje
• porovnávání stringu s ohledem na daný jazyk
• formátování čísel
• formátování data a času
• práci s místním časem
• Metoda Intl.supportedValuesOf('timeZone')
• Vrací seznam IANA identifikátorů
• Odlišné seznamy per browser
• Chrome 428, Firefox 468, Safari 429
Frontend –
seznam identifikátorů.
Frontend – seznam
identifikátorů.
@vvo/tzdb npm package
• Automatický update na základě změny
geonames.org (generováno z IANA databáze)
• Zjednodušený seznam IANA identifikátorů (318)
• Seskupování identifikátorů
• Když je identifikátor ve stejné zemi
• Když je daylight saving time nebo letní posun času
stejný (a naopak)
• “hlavní” identifikátor je vždy z nejvíce zalidněného
města
• Velikost balíčku:
130,7kB
• Velikost JSON
souboru:
33,7kB
Frontend –
seznam identifikátorů.
Příklad seskupeného identifikátoru
• Metoda Intl.DateTimeFormat().resolvedOptions().timezone
• Využítí group property z JSON
• Fallback na UTC
• Příklady:
Frontend - defaultní místní čas.
OS (Windows) Intl API Dropdown
(UTC+1:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague Europe/Prague Europe/Prague
(UTC+6:30) Yangon (Rangoon) Asia/Rangoon Asia/Yangon
(UTC-9) Coordinated Universal Time-09 Etc/GMT+9 UTC
• Europe/Prague s reálným UTC offsetem:
• 13.9.2022 ⟶ UTC +02:00
• 24.12.2022 ⟶ UTC +01:00
Frontend – informace o UTC offsetu.
Time zone display name UTC offset based on:
Contentful (GMT+02:00) - Europe/Prague Current local time
Youtube (GMT+02:00) Praha Current local time
Google Calendar (GMT+02:00) Středoevropský čas - Praha Current local time
Zoom (GMT+2:00) Prague Bratislava Current local time
Windows OS (UTC+01:00) Praha, Bratislava, … Standard time
Office 365 (Outlook calendar) (UTC+01:00) Praha, Bratislava, … Standard time
Frontend – informace o UTC offsetu.
Frontend – informace o UTC offsetu.
• Payload:
• Důvody
• Žádná migrace dat
• Backend dále pracuje s UTC timestamp
Frontend – komunikace s backendem.
{
"scheduled_to": "2022-10-31T08:00:00Z",
"display_timezone": "Europe/Prague"
}
Nevynalézejte kolo
a využijte práce lidí, kteří tím očistcem prošli
před vámi.
Na závěr.
Vyhněte se časovým zónám,
pokud to jde.
Nepodceňujte přípravu
a alespoň trochou teorie infikujte nejen sebe, ale i
své týmové kolegy.

Mais conteúdo relacionado

Mais procurados

المطالعة للصف الرابع الاعدادي
المطالعة للصف الرابع الاعداديالمطالعة للصف الرابع الاعدادي
المطالعة للصف الرابع الاعداديAyad Haris Beden
 
استحالة تحريف الكتاب المقدس
استحالة تحريف الكتاب المقدساستحالة تحريف الكتاب المقدس
استحالة تحريف الكتاب المقدسIsac Elgawly
 
RunX: deploy real-time OSes as containers at the edge
RunX: deploy real-time OSes as containers at the edgeRunX: deploy real-time OSes as containers at the edge
RunX: deploy real-time OSes as containers at the edgeStefano Stabellini
 
バックアップとリストアの基礎
バックアップとリストアの基礎バックアップとリストアの基礎
バックアップとリストアの基礎Kazuki Takai
 
Salty OPS – Saltstack Introduction
Salty OPS – Saltstack IntroductionSalty OPS – Saltstack Introduction
Salty OPS – Saltstack IntroductionWalter Liu
 
Rosh hodesh luna nueva
Rosh hodesh luna nuevaRosh hodesh luna nueva
Rosh hodesh luna nuevaMario777
 
Maksim Vazhenin [Dell Technologies] | InfluxDB for Storage System Monitoring ...
Maksim Vazhenin [Dell Technologies] | InfluxDB for Storage System Monitoring ...Maksim Vazhenin [Dell Technologies] | InfluxDB for Storage System Monitoring ...
Maksim Vazhenin [Dell Technologies] | InfluxDB for Storage System Monitoring ...InfluxData
 
بوربوينت كرازة بولس الرسول – اعمال الرسل
بوربوينت كرازة بولس الرسول – اعمال الرسلبوربوينت كرازة بولس الرسول – اعمال الرسل
بوربوينت كرازة بولس الرسول – اعمال الرسلmagdy-f
 
1 تـقسيم الكتاب المقدس.ppt
1 تـقسيم الكتاب المقدس.ppt1 تـقسيم الكتاب المقدس.ppt
1 تـقسيم الكتاب المقدس.pptfatherjohn
 
المختارات من المناسابات بين السور والآيات
المختارات من المناسابات بين السور والآيات المختارات من المناسابات بين السور والآيات
المختارات من المناسابات بين السور والآيات عرفت فالزم
 
第5回oss運用管理勉強会 zabbix徹底活用術の紹介
第5回oss運用管理勉強会 zabbix徹底活用術の紹介第5回oss運用管理勉強会 zabbix徹底活用術の紹介
第5回oss運用管理勉強会 zabbix徹底活用術の紹介Daisuke Ikeda
 
Db2 & Db2 Warehouse v11.5.4 最新情報アップデート2020年8月25日
Db2 & Db2 Warehouse v11.5.4 最新情報アップデート2020年8月25日Db2 & Db2 Warehouse v11.5.4 最新情報アップデート2020年8月25日
Db2 & Db2 Warehouse v11.5.4 最新情報アップデート2020年8月25日IBM Analytics Japan
 
Configuring & Installing Joomla on Windows using WAMP Server.
Configuring & Installing Joomla on Windows using WAMP Server.Configuring & Installing Joomla on Windows using WAMP Server.
Configuring & Installing Joomla on Windows using WAMP Server.Abhijit B.
 
Apologetics, Kreeft chapter 11: Life after death
Apologetics, Kreeft chapter 11: Life after deathApologetics, Kreeft chapter 11: Life after death
Apologetics, Kreeft chapter 11: Life after deathRichard Chamberlain
 
الرقية الشرعية الشاملة
 الرقية الشرعية الشاملة الرقية الشرعية الشاملة
الرقية الشرعية الشاملةyahyaislam
 
Android media framework overview
Android media framework overviewAndroid media framework overview
Android media framework overviewJerrin George
 

Mais procurados (19)

المطالعة للصف الرابع الاعدادي
المطالعة للصف الرابع الاعداديالمطالعة للصف الرابع الاعدادي
المطالعة للصف الرابع الاعدادي
 
استحالة تحريف الكتاب المقدس
استحالة تحريف الكتاب المقدساستحالة تحريف الكتاب المقدس
استحالة تحريف الكتاب المقدس
 
RunX: deploy real-time OSes as containers at the edge
RunX: deploy real-time OSes as containers at the edgeRunX: deploy real-time OSes as containers at the edge
RunX: deploy real-time OSes as containers at the edge
 
バックアップとリストアの基礎
バックアップとリストアの基礎バックアップとリストアの基礎
バックアップとリストアの基礎
 
Salty OPS – Saltstack Introduction
Salty OPS – Saltstack IntroductionSalty OPS – Saltstack Introduction
Salty OPS – Saltstack Introduction
 
Rosh hodesh luna nueva
Rosh hodesh luna nuevaRosh hodesh luna nueva
Rosh hodesh luna nueva
 
Maksim Vazhenin [Dell Technologies] | InfluxDB for Storage System Monitoring ...
Maksim Vazhenin [Dell Technologies] | InfluxDB for Storage System Monitoring ...Maksim Vazhenin [Dell Technologies] | InfluxDB for Storage System Monitoring ...
Maksim Vazhenin [Dell Technologies] | InfluxDB for Storage System Monitoring ...
 
بوربوينت كرازة بولس الرسول – اعمال الرسل
بوربوينت كرازة بولس الرسول – اعمال الرسلبوربوينت كرازة بولس الرسول – اعمال الرسل
بوربوينت كرازة بولس الرسول – اعمال الرسل
 
1 تـقسيم الكتاب المقدس.ppt
1 تـقسيم الكتاب المقدس.ppt1 تـقسيم الكتاب المقدس.ppt
1 تـقسيم الكتاب المقدس.ppt
 
القبر صندوق العمل
القبر صندوق العملالقبر صندوق العمل
القبر صندوق العمل
 
المختارات من المناسابات بين السور والآيات
المختارات من المناسابات بين السور والآيات المختارات من المناسابات بين السور والآيات
المختارات من المناسابات بين السور والآيات
 
第5回oss運用管理勉強会 zabbix徹底活用術の紹介
第5回oss運用管理勉強会 zabbix徹底活用術の紹介第5回oss運用管理勉強会 zabbix徹底活用術の紹介
第5回oss運用管理勉強会 zabbix徹底活用術の紹介
 
Db2 & Db2 Warehouse v11.5.4 最新情報アップデート2020年8月25日
Db2 & Db2 Warehouse v11.5.4 最新情報アップデート2020年8月25日Db2 & Db2 Warehouse v11.5.4 最新情報アップデート2020年8月25日
Db2 & Db2 Warehouse v11.5.4 最新情報アップデート2020年8月25日
 
Oracle GoldenGate FAQ
Oracle GoldenGate FAQOracle GoldenGate FAQ
Oracle GoldenGate FAQ
 
Configuring & Installing Joomla on Windows using WAMP Server.
Configuring & Installing Joomla on Windows using WAMP Server.Configuring & Installing Joomla on Windows using WAMP Server.
Configuring & Installing Joomla on Windows using WAMP Server.
 
Apologetics, Kreeft chapter 11: Life after death
Apologetics, Kreeft chapter 11: Life after deathApologetics, Kreeft chapter 11: Life after death
Apologetics, Kreeft chapter 11: Life after death
 
الرقية الشرعية الشاملة
 الرقية الشرعية الشاملة الرقية الشرعية الشاملة
الرقية الشرعية الشاملة
 
Android media framework overview
Android media framework overviewAndroid media framework overview
Android media framework overview
 
Linux crontab
Linux crontabLinux crontab
Linux crontab
 

Kontent.ai DevMeetup #1 - Implementace časových zón v single page aplikaci s .NET backendem

  • 1. Časové zóny v single-page aplikaci s .NET backendem. Barbora Najmanová Zbyněk Hanák
  • 2. • Příběh Connie • Trocha neškodné teorie času • Databáze časových zón • Příklad praktické implementace Agenda
  • 4. • Práce v mezinárodních týmech • Nastavování publikace na později pro stránky po celém světě Proč uživatel potřebuje měnit časovou zónu?
  • 5. Fyzický čas Civilní čas Ďábel je ukryt v čase. • UTC – Koordinovaný světový čas • Unix integer timestamp – 1662391423 • UTC string timestamp (ISO-8601) – 2022-09-13T10:15:00Z • Formát data a času (dd.MM.yyyy) • Systém kalendáře • Časové pásmo
  • 6.
  • 8.
  • 9. Časová pásma. Časové pásmo je ta část Země, která používá stejný standardní čas. Časové pásmo úzce chápeme jako UTC offset. počítačem náhodně vygenerovaný Product Manager Vždyť je to jeden dropdown a dvacet čtyři položek. Co na tom budete dělat dva měsíce?”
  • 10.
  • 11. Standardní čas. Standardní čas je místní čas ve státě nebo oblasti v období, kdy neplatí sezónní změny času. EST Eastern Standard Time UTC -05:00 CET Central European Time UTC +01:00 AEST Australian Eastern Standard Time UTC +10:00
  • 12. Standardní čas. A drobné problémy s ním. CST Central Standard Time UTC -06:00 CST China Standard Time UTC +08:00 CST Cuba Standard Time UTC -05:00 Nejednoznačný systém zkratek AEST Australian Eastern Standard Time UTC +10:00 AEDT Australian Eastern Daylight Saving Time UTC +11:00 Sezónní změny času
  • 13. Standardní čas. A drobné problémy s ním. UTC offset a sezónní změny času v Austrálii
  • 14. Co jste si (možná) mysleli o letním čase? Letní čas začíná a končí všude ve stejnou dobu. Letní čas v dané zemi začíná a končí vždy ve stejnou dobu. V celé zemi se buďto používá nebo nepoužívá letní čas. No tak aspoň v daném státě, regionu nebo oblasti! Ale přidává se vždycky hodina navíc, že?
  • 15. Místní čas. Místní čas je spjatý s konkrétním místem, které zachovává konzistenci a kontinuitu pravidel pro sledování času. • America/New_York • Europe/Prague • Australia/Sydney
  • 16. Databáze časových zón. Europe/Prague Kolaborativní projekt, který shromažďuje a publikuje informace o změnách ve sledování světového času. Distribuce prostřednictvím textových souborů IANA tz database Central European Time Windows registr HKEY_LOCAL_MACHINESOFTWAREMicrosof tWindows NTCurrentVersionTime Zones .NET TimeZoneInfo.GetSystemTimeZones Win32 EnumDynamicTimeZoneInformation MS Windows TZ DB
  • 17. Databáze časových zón. + udržovaná komunitou + udržuje historické změny (od 1970) + jednoznačné místní identifikátory + velmi rozšířená (Unicode CLDR, Unix, Linux, macOS, iOS, Android, JRE, PHP, JavaScript Intl API) - velké množství identifikátorů IANA tz database + nativní podpora, pokud vyvíjíte aplikace pro MS prostředí - neudržuje mnoho historických změn - nejednoznačné identifikátory, příliš široce definované Arab Standard Time +3:00 Arabian Standard Time +4:00 - displayName zobrazuje vždy pouze standardní UTC offset MS Windows TZ DB
  • 21. • Seznam identifikátorů • Výchozí místní čas • Informace o UTC offsetu Co nás čekalo vyřešit na frontendu?
  • 22. Intl API • ECMAScript Internationalization API • Poskytuje • porovnávání stringu s ohledem na daný jazyk • formátování čísel • formátování data a času • práci s místním časem • Metoda Intl.supportedValuesOf('timeZone') • Vrací seznam IANA identifikátorů • Odlišné seznamy per browser • Chrome 428, Firefox 468, Safari 429 Frontend – seznam identifikátorů.
  • 23. Frontend – seznam identifikátorů. @vvo/tzdb npm package • Automatický update na základě změny geonames.org (generováno z IANA databáze) • Zjednodušený seznam IANA identifikátorů (318) • Seskupování identifikátorů • Když je identifikátor ve stejné zemi • Když je daylight saving time nebo letní posun času stejný (a naopak) • “hlavní” identifikátor je vždy z nejvíce zalidněného města
  • 24. • Velikost balíčku: 130,7kB • Velikost JSON souboru: 33,7kB Frontend – seznam identifikátorů. Příklad seskupeného identifikátoru
  • 25. • Metoda Intl.DateTimeFormat().resolvedOptions().timezone • Využítí group property z JSON • Fallback na UTC • Příklady: Frontend - defaultní místní čas. OS (Windows) Intl API Dropdown (UTC+1:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague Europe/Prague Europe/Prague (UTC+6:30) Yangon (Rangoon) Asia/Rangoon Asia/Yangon (UTC-9) Coordinated Universal Time-09 Etc/GMT+9 UTC
  • 26. • Europe/Prague s reálným UTC offsetem: • 13.9.2022 ⟶ UTC +02:00 • 24.12.2022 ⟶ UTC +01:00 Frontend – informace o UTC offsetu.
  • 27. Time zone display name UTC offset based on: Contentful (GMT+02:00) - Europe/Prague Current local time Youtube (GMT+02:00) Praha Current local time Google Calendar (GMT+02:00) Středoevropský čas - Praha Current local time Zoom (GMT+2:00) Prague Bratislava Current local time Windows OS (UTC+01:00) Praha, Bratislava, … Standard time Office 365 (Outlook calendar) (UTC+01:00) Praha, Bratislava, … Standard time Frontend – informace o UTC offsetu.
  • 28. Frontend – informace o UTC offsetu.
  • 29. • Payload: • Důvody • Žádná migrace dat • Backend dále pracuje s UTC timestamp Frontend – komunikace s backendem. { "scheduled_to": "2022-10-31T08:00:00Z", "display_timezone": "Europe/Prague" }
  • 30. Nevynalézejte kolo a využijte práce lidí, kteří tím očistcem prošli před vámi. Na závěr. Vyhněte se časovým zónám, pokud to jde. Nepodceňujte přípravu a alespoň trochou teorie infikujte nejen sebe, ale i své týmové kolegy.