G├╝n ─▒┼č─▒─č─▒ndan yararlanma saati ve saat dilimi en iyi uygulamalar─▒ [kapal─▒]


Al─▒nan cevaba git


Bu soruyu ve cevaplar─▒n─▒, g├╝n ─▒┼č─▒─č─▒ndan yararlanma saati ile, ├Âzellikle de as─▒l de─či┼čimlerle ba┼ča ├ž─▒kmak i├žin kesin bir rehber haline getirmeyi umuyorum.

Eklemek istedi─činiz bir ┼čey varsa, l├╝tfen yap─▒n

Pek ├žok sistem, do─čru zaman─▒n tutulmas─▒na ba─čl─▒d─▒r, g├╝n ─▒┼č─▒─č─▒ndan yararlanma nedeniyle zamanla ilgili sorun vard─▒r - saati ileri ya da geri hareket ettirin.

├ľrne─čin, sipari┼čin d├╝zenine ba─čl─▒ olarak sipari┼č alma sisteminde i┼č kurallar─▒ vard─▒r - saat de─či┼čirse, kurallar net olmayabilir. Sipari┼čin s├╝resi nas─▒l devam etmeli? Elbette sonsuz say─▒da senaryo var - bu sadece a├ž─▒klay─▒c─▒d─▒r.

  • G├╝n ─▒┼č─▒─č─▒ndan yararlanma sorunuyla nas─▒l ba┼ča ├ž─▒kt─▒n─▒z?
  • Hangi varsay─▒mlar ├ž├Âz├╝m├╝n├╝z├╝n bir par├žas─▒? (burada ba─člam aran─▒yor)

├ľnemli olarak, e─čer ├Âyle de─čilse:

  • ─░┼če yaramayan ne denedin?
  • Neden i┼če yaramad─▒?

Programlama, i┼čletim sistemi, veri kal─▒c─▒l─▒─č─▒ ve konunun ilgili di─čer y├Ânleriyle ilgilenirim.

Genel cevaplar harika, ancak yaln─▒zca bir platformda mevcutlarsa ayr─▒nt─▒lar─▒ g├Ârmek istiyorum.


2003









Cevap say─▒s─▒n─▒ say: 30






Cevaplar─▒n ├Âzeti ve di─čer veriler: (l├╝tfen sizinkini ekleyin)

Yap:

  • Ne zaman tam bir andan s├Âz ederseniz, zaman─▒ g├╝n ─▒┼č─▒─č─▒ndan yararlanma durumundan etkilenmeyen birle┼čik bir standarda g├Âre s├╝rd├╝r├╝n. (GMT ve UTC bu konuda e┼čde─čerdir, ancak UTC teriminin kullan─▒lmas─▒ tercih edilir. UTC'nin Zulu veya Z zaman─▒ olarak da bilindi─čine dikkat edin .)
  • Bunun yerine, yerel bir zaman de─čeri kullanarak bir s├╝re s├╝rd├╝rmeyi se├žtiyseniz, UTC'den bu belirli bir s├╝re i├žin yerel zaman kaymas─▒n─▒ ekleyin (bu sapma y─▒l boyunca de─či┼čebilir), b├Âylece zaman damgas─▒ daha sonra a├ž─▒k bir ┼čekilde yorumlanabilir.
  • Baz─▒ durumlarda, hem UTC saatini hem de e┼čde─čer yerel saati kaydetmeniz gerekebilir . Genellikle bu, iki ayr─▒ alanla yap─▒l─▒r, ancak baz─▒ platformlar datetimeoffset , her ikisini de tek bir alanda depolayabilecek bir t├╝r├╝ destekler .
  • Zaman damgalar─▒n─▒ say─▒sal bir de─čer olarak saklarken Unix zaman─▒n─▒ kullan─▒n - bu, o zamandan beri ge├žen b├╝t├╝n saniye say─▒s─▒d─▒r 1970-01-01T00:00:00Z (art─▒k saniye hari├ž). Daha y├╝ksek hassasiyet istiyorsan─▒z, bunun yerine milisaniye kullan─▒n. Bu de─čer, herhangi bir zaman dilimi ayarlamas─▒ olmadan her zaman UTC'ye dayanmal─▒d─▒r.
  • Daha sonra zaman damgas─▒n─▒ de─či┼čtirmeniz gerekebilirse, orijinal zaman dilimi ID'sini ekleyin, b├Âylece ofsetin kaydedilen orijinal de─čerden de─či┼čip de─či┼čmedi─čini belirleyebilirsiniz.
  • Gelecekteki olaylar─▒ planlarken, ofsetin de─či┼čmesi yayg─▒n oldu─ču i├žin, UTC yerine genellikle yerel saat tercih edilir. Cevap ve blog g├Ânderisine bak─▒n .
  • Do─čum g├╝nleri ve y─▒ld├Ân├╝mleri gibi t├╝m tarihleri ÔÇőÔÇődepolarken UTC'ye veya ba┼čka bir saat dilimine d├Ân├╝┼čt├╝rmeyin.
    • M├╝mk├╝nse, g├╝n├╝n zaman─▒n─▒ i├žermeyen, yaln─▒zca tarihi bir veri t├╝r├╝nde saklay─▒n.
    • E─čer b├Âyle bir t├╝r mevcut de─čilse, de─čeri yorumlarken g├╝n├╝n saatini daima g├Âz ard─▒ etti─činizden emin olun. G├╝n├╝n g├Âz ard─▒ edilece─činden emin olam─▒yorsan─▒z, o g├╝n daha g├╝venli bir temsili zaman olarak 00:00 Geceyar─▒s─▒ yerine 12:00 ├ľ─člen'i se├žin.
  • Saat dilimi ofsetlerinin her zaman tam say─▒ oldu─ču bir saat olmad─▒─č─▒n─▒ unutmay─▒n (├Ârne─čin, Hint Standart Saati UTC + 05: 30 ve Nepal, UTC + 05: 45 kullan─▒r).
  • Java kullan─▒yorsan─▒z, Java 8 ve ├╝st├╝ i├žin java.time kullan─▒n .
  • Kullan─▒l─▒yorsa .NET , kullanmay─▒ d├╝┼č├╝n├╝n Noda Zaman .
  • Noda Time olmadan .NET kullan─▒yorsan─▒z, DateTimeOffset bunun genellikle daha iyi bir se├žim oldu─čunu d├╝┼č├╝n├╝n DateTime .
  • Perl kullan─▒yorsan─▒z, DateTime kullan─▒n .
  • Python kullan─▒yorsan─▒z, pytz veya dateutil kullan─▒n .
  • JavaScript kullan─▒yorsan─▒z , moment- timeezone eklentisi ile moment.js kullan─▒n .http://momentjs.com/timezone/
  • PHP> 5.2 kullan─▒yorsan─▒z DateTime , ve DateTimeZone s─▒n─▒flar─▒ taraf─▒ndan sa─članan yerel zaman dilimlerini d├Ân├╝┼čt├╝rmelerini kullan─▒n . Kullan─▒rken dikkatli olun DateTimeZone::listAbbreviations() - cevaba bak─▒n─▒z . PHP'yi en son Olson verileriyle birlikte tutmak i├žin, d├╝zenli olarak timezonedb PECL paketini kurun ; cevab─▒ g├Âr .
  • C ++ kullan─▒yorsan─▒z, IANA saat dilimi veritaban─▒n─▒ do─čru ┼čekilde uygulayan bir kitapl─▒k kulland─▒─č─▒n─▒zdan emin olun . Bunlar cctz , ICU ve Howard Hinnant'─▒n "tz" k├╝t├╝phanesini i├žerir .
    • Saat dilimi d├Ân├╝┼č├╝mleri i├žin Boost kullanmay─▒n . ─░ken onun API iddialar─▒ standart IANA desteklemek i├žin (aka "zoneinfo") tan─▒mlay─▒c─▒lar, bu kabaca onlar─▒ e┼čler her b├Âlge olmu┼č olabilir de─či┼čikliklerin zengin tarihini dikkate almadan, POSIX tarz─▒ verilere. (Ayr─▒ca, dosya bak─▒mdan d├╝┼čt├╝.)
  • Rust kullan─▒yorsan─▒z, chrono kullan─▒n .
  • ─░┼č kurallar─▒n─▒n ├žo─ču UTC veya GMT yerine medeni zaman─▒ kullan─▒r. Bu nedenle, uygulama mant─▒─č─▒n─▒ uygulamadan ├Ânce UTC zaman damgalar─▒n─▒ yerel bir saat dilimine d├Ân├╝┼čt├╝rmeyi planlay─▒n.
  • Zaman dilimleri ve ofsetlerin sabit olmad─▒─č─▒n─▒ ve de─či┼čebilece─čini unutmay─▒n. Mesela, tarihsel olarak ABD ve ─░ngiltere ayn─▒ tarihleri ÔÇőÔÇő'├Âne ├ž─▒kma' ve 'geri ├žekilme' i├žin kulland─▒lar. Ancak, 2007'de ABD saatlerin de─či┼čti─či tarihleri ÔÇőÔÇőde─či┼čtirdi. Bu, y─▒l─▒n 48 haftas─▒ i├žin Londra ve New York zaman─▒ aras─▒ndaki fark─▒n 5 saat ve 4 hafta boyunca (ilkbaharda 3, sonbaharda 1) 4 saat oldu─ču anlam─▒na gelir. Birden fazla b├Âlgeyi i├žeren hesaplamalarda bunun gibi ├Â─čelere dikkat edin.
  • Do─čru al─▒m i├žin kaydetmeniz gereken zaman t├╝r├╝n├╝ (ger├žek olay zaman─▒, yay─▒n zaman─▒, g├Âreceli zaman, ge├žmi┼č zaman, tekrarlanan zaman) g├Âz ├Ân├╝nde bulundurun - bkz. bu cevap .
  • ─░┼čletim sisteminizi, veritaban─▒n─▒z─▒ ve uygulama tzdata dosyalar─▒n─▒z─▒ kendi aralar─▒nda ve d├╝nyan─▒n geri kalan─▒ aras─▒nda senkronize tutun.
  • Sunucularda, donan─▒m saatlerini ve i┼čletim sistemi saatlerini yerel bir saat dilimi yerine UTC olarak ayarlay─▒n.
  • ├ľnceki madde i┼čaretinden ba─č─▒ms─▒z olarak, web siteleri de dahil olmak ├╝zere sunucu taraf─▒ kodu hi├žbir zaman sunucunun yerel saat diliminin ├Âzel bir ┼čey olmas─▒n─▒ beklememelidir. cevab─▒ g├Âr .
  • Genel olarak config dosya ayarlar─▒ veya varsay─▒lanlar─▒ yerine, zaman dilimlerinizle uygulama kodunuzda durum baz─▒nda ├žal─▒┼čmay─▒ tercih edin.
  • T├╝m sunucularda NTP servislerini kullan─▒n .
  • FAT32 kullan─▒yorsan─▒z , zaman damgalar─▒n─▒n UTC de─čil yerel saatte sakland─▒─č─▒n─▒ unutmay─▒n.
  • Tekrarlanan etkinliklerle (├Ârne─čin haftal─▒k TV ┼čovu) u─čra┼č─▒rken, zaman─▒n DST ile de─či┼čti─čini ve zaman dilimleri aras─▒nda farkl─▒ olaca─č─▒n─▒ unutmay─▒n.
  • Her zaman tarih-zaman de─čerlerini alt s─▒n─▒r dahil, ├╝st s─▒n─▒r ├Âzel ( >= , < ) olarak sorgulay─▒n .

Yapma:

  • America/New_York "Saat dilimi uzakl─▒─č─▒" gibi bir "saat dilimi" ile kar─▒┼čt─▒rmay─▒n -05:00 . Onlar iki farkl─▒ ┼čey. Wiki zaman dilimi etiketine bak─▒n .
  • Date Eski web taray─▒c─▒lar─▒nda tarih ve saat hesaplamalar─▒n─▒ yapmak i├žin JavaScript'in nesnesini kullanmay─▒n , ├ž├╝nk├╝ ECMAScript 5.1 ve daha d├╝┼č├╝kleri , g├╝n ─▒┼č─▒─č─▒ndan yararlanma saati yanl─▒┼č kullanabilecek bir tasar─▒m kusuruna sahiptir. (Bu ECMAScript 6 / 2015'te d├╝zeltildi).
  • M├╝┼čterinin saatine asla g├╝venme. ├çok iyi yanl─▒┼č olabilir.
  • ─░nsanlara "her zaman her yerde UTC kullanma" deme. Bu yayg─▒n tavsiye, bu belgenin ├Ânceki b├Âl├╝mlerinde anlat─▒lan ge├žerli senaryolar─▒n ├žo─čunda eksiktir. Bunun yerine, birlikte ├žal─▒┼čt─▒─č─▒n─▒z veriler i├žin uygun zaman referans─▒n─▒ kullan─▒n. ( Zaman damgas─▒ UTC kullanabilir, ancak gelecekteki zaman ├žizelgeleme ve yaln─▒zca tarih de─čerleri kullan─▒lmamal─▒d─▒r.)

Test yapmak:

  • Test yaparken, Bat─▒, Do─ču, Kuzey ve G├╝ney yar─▒m k├╝relerdeki ├╝lkeleri (asl─▒nda d├╝nyan─▒n her ├žeyre─činde, yani 4 b├Âlgede) test etmeyi unutmay─▒n ; hem DST devam ediyor hem de yok (8 verir) DST kullanmay─▒n (ba┼čka b├Âlgeleri kapsayan 4 tane, toplamda 12).
  • DST testi ge├ži┼čini, yani ┼ču anda yaz saati i├žindeyken, k─▒┼čtan bir zaman de─čeri se├žin.
  • UTC + 12 olan bir saat dilimi gibi DST ile s─▒n─▒r durumlar─▒n─▒ test edin, yerel saati UTC + 13'├╝ yaz─▒n, hatta k─▒┼č─▒n UTC + 13 olan yerleri test edinhttp://en.wikipedia.org/wiki/UTC%252B13:00
  • T├╝m ├╝├ž├╝nc├╝ taraf kitapl─▒klar─▒ ve uygulamalar─▒n─▒ test edin ve saat dilimi verilerini do─čru i┼člediklerinden emin olun.
  • En az yar─▒m saatlik zaman dilimlerini test edin.

Referans:

Di─čer:


897







Yukar─▒daki cevaplara ne ekleyebilece─čimden emin de─čilim, ama i┼čte benden birka├ž puan:

Zaman t├╝rleri

G├Âz ├Ân├╝nde bulundurman─▒z gereken d├Ârt farkl─▒ zaman vard─▒r:

  1. Etkinlik zaman─▒: ├Ârne─čin, uluslararas─▒ bir spor etkinli─činin ger├žekle┼čti─či saat veya bir ta├ž giyme / ├Âl├╝m / vb. Bu, izleyiciye de─čil etkinli─čin saat dilimine ba─čl─▒d─▒r.
  2. Televizyon zaman─▒: ├Ârne─čin, belirli bir TV ┼čovu t├╝m d├╝nyada yerel saat 21: 00'de yay─▒nlanmaktad─▒r. Sonu├žlar─▒ web sitenizde (Amerikan Idol gibi) yay─▒nlamay─▒ d├╝┼č├╝n├╝rken ├Ânemli
  3. G├Âreceli s├╝re: ├Ârne─čin: Bu sorunun 21 saat i├žinde kapanmas─▒ a├ž─▒k bir ├Âd├╝l al─▒yor. Bu g├Âr├╝nt├╝lemek kolayd─▒r
  4. Tekrarlanan zaman: ├ľrn: Her Pazartesi saat 9: 00'da bir DST de─či┼čse bile bir TV ┼čovu d├╝zenlenmektedir.

Tarihi / alternatif zaman da vard─▒r. Bunlar can s─▒k─▒c─▒ ├ž├╝nk├╝ standart zamana geri d├Ânmeyebilirler. ├ľrn: Julian tarihleri, Saturn'teki bir Ay takvimine, The Klingon takvimine g├Âre tarihler.

UTC'de ba┼člang─▒├ž ÔÇőÔÇő/ biti┼č zaman damgalar─▒n─▒n saklanmas─▒ iyi sonu├ž verir. 1 i├žin, etkinlikle birlikte kaydedilen bir etkinlik zaman dilimi ad─▒ + ofsetine ihtiyac─▒n─▒z var. 2 i├žin, her bir b├Âlgeyle birlikte bir yerel zaman tan─▒mlay─▒c─▒s─▒na ve her izleyici i├žin saklanan bir yerel saat dilimi ad─▒ + ofsetine ihtiyac─▒n─▒z var (bir s─▒k─▒nt─▒ i├žindeyseniz bunu IP'den t├╝retmek m├╝mk├╝nd├╝r). 3 i├žin UTC saniye i├žinde saklay─▒n ve saat dilimleri i├žin gerek yok. 4, global mi yoksa yerel bir etkinlik mi oldu─čuna ba─čl─▒ olarak 1 veya 2 ├Âzel bir durumdur, ancak zaman damgas─▒ s─▒ras─▒nda olu┼čturulmu┼č bir zaman deposunu da saklaman─▒z gerekir, b├Âylece bu olay─▒n olu┼čturulmas─▒ndan ├Ânce veya sonra bir saat dilimi tan─▒m─▒n─▒n de─či┼čip de─či┼čmedi─čini anlayabilirsiniz. Tarihsel verileri g├Âstermeniz gerekiyorsa, bu gereklidir.

Zamanlar─▒ saklamak

  • UTCÔÇÖde her zaman zaman saklay─▒n
  • Ekranda yerel saate d├Ân├╝┼čt├╝r (yerel olarak verilere bakarak kullan─▒c─▒ taraf─▒ndan tan─▒mlan─▒r)
  • Bir saat dilimi kaydederken, ad─▒, zaman damgas─▒ ve ofset gerekir. Bu gereklidir, ├ž├╝nk├╝ h├╝k├╝metler bazen kendi zaman dilimlerinin anlamlar─▒n─▒ de─či┼čtirir (├Ârne─čin: ABDÔÇÖnin DST tarihlerini de─či┼čtirdi) ve uygulaman─▒z─▒n olaylar─▒ nezaketle ele almas─▒ gerekiyor ... ├Âr. de─či┼čti.

Ofsetler ve isimler

Yukar─▒dakilerin bir ├Ârne─či ┼č├Âyle olabilir:

Futbol d├╝nya kupas─▒ finalleri ma├ž─▒ 11 Temmuz 2010 g├╝n├╝ saat 19: 00'da G├╝ney Afrika'da (UTC + 2 - SAST) oldu.

2010 WCS Final G├╝ney Afrika zaman dilimi tan─▒m de─či┼čiklikleri, bile ger├žekle┼čti─či Bu bilgilerle, biz tarihsel olarak tam olarak ne zaman belirleyebilir ve onlar veritaban─▒n─▒ sorgulad─▒─č─▒n─▒zda zamanda kendi yerel saat diliminde izleyiciler bunu g├Âsteririz edebilmek.

Sistem zaman─▒

Ayr─▒ca i┼čletim sisteminizi, veritaban─▒n─▒z─▒ ve uygulama tzdata dosyalar─▒n─▒z─▒ hem birbirleriyle hem de d├╝nyan─▒n geri kalan─▒yla senkronize tutman─▒z ve y├╝kseltme yaparken kapsaml─▒ bir ┼čekilde test etmeniz gerekir. G├╝vendi─činiz ├╝├ž├╝nc├╝ parti bir uygulaman─▒n TZ de─či┼čikli─čini do─čru bir ┼čekilde i┼člemedi─či hen├╝z duyulmam─▒┼č.

Donan─▒m saatlerinin UTC'ye ayarland─▒─č─▒ndan ve d├╝nyadaki sunucular─▒ ├žal─▒┼čt─▒r─▒yorsan─▒z, OS'lerinin de UTC kullanacak ┼čekilde yap─▒land─▒r─▒ld─▒─č─▒ndan emin olun. Saat ba┼č─▒ d├Ând├╝r├╝len apache g├╝nl├╝k dosyalar─▒n─▒ birden fazla saat dilimindeki sunuculardan kopyalaman─▒z gerekti─činde bu belirginle┼čir. Bunlar─▒ dosya ad─▒na g├Âre s─▒ralamak, yaln─▒zca t├╝m dosyalar ayn─▒ saat diliminde adland─▒r─▒l─▒rsa ├žal─▒┼č─▒r. Ayr─▒ca, bir kutudan di─čerine ssh yapt─▒─č─▒n─▒z ve zaman damgalar─▒n─▒ kar┼č─▒la┼čt─▒rman─▒z gerekti─činde kafan─▒zda tarih matematik yapman─▒z gerekmedi─či anlam─▒na gelir.

Ayr─▒ca, t├╝m kutularda ntpd komutunu ├žal─▒┼čt─▒r─▒n.

M├╝┼čteriler

─░stemci bir makineden ald─▒─č─▒n─▒z zaman damgas─▒n─▒ asla ge├žerli olarak g├╝venmeyin. ├ľrne─čin, Tarih: HTTP ba┼čl─▒klar─▒ veya bir javascript Date.getTime() ├ža─čr─▒s─▒. Opak tan─▒mlay─▒c─▒ olarak kullan─▒ld─▒─č─▒nda veya ayn─▒ istemcideki tek bir oturumda tarih matemati─či yaparken bunlar iyidir, ancak bu de─čerleri sunucuda sahip oldu─čunuz bir ┼čeyle kar┼č─▒la┼čt─▒rmaya ├žal─▒┼čmay─▒n. M├╝┼čterileriniz NTP ├žal─▒┼čt─▒rm─▒yor ve mutlaka BIOS saatlerinde ├žal─▒┼čan bir bataryaya sahip olmayabilir.

├Ânemsiz ┼čeyler

Sonunda, h├╝k├╝metler bazen ├žok garip ┼čeyler yapacak:

HollandaÔÇÖda standart s├╝re 1909-05-01 - 1937-06-30 aras─▒nda tam 19 dakika ve UTCÔÇÖnin ├Ân├╝nde 32,13 saniye idi. Bu zaman dilimi tam olarak HH: MM format─▒ kullan─▒larak temsil edilemez.

Tamam, san─▒r─▒m bittim.


309







Bu ├Ânemli ve ┼ča┼č─▒rt─▒c─▒ derecede zor bir konudur. Ger├žek ┼ču ki, devam eden zaman i├žin tamamen tatmin edici bir standart yoktur. ├ľrne─čin, SQL standard─▒ ve ISO format─▒ (ISO 8601) a├ž─▒k├ža yeterli de─čil.

Kavramsal bak─▒┼č a├ž─▒s─▒ndan, genellikle iki t├╝r zaman-tarih verisi ele al─▒n─▒r ve bunlar─▒ ay─▒rt etmek uygundur (yukar─▒daki standartlar yok): " fiziksel zaman " ve " sivil zaman ".

Zaman─▒n "fiziksel" bir an─▒, fizi─čin ilgilendi─či s├╝rekli evrensel zaman ├žizelgesindeki bir noktad─▒r (g├Ârecelili─či g├Âz ard─▒ etmek, elbette). Bu konsept, UTC'de (├Ârne─čin, art─▒k saniyeleri g├Ârmezden gelirseniz) yeterince kodlanm─▒┼č bir ┼čekilde devam ettirilebilir.

Bir "medeni" zaman, medeni normlar─▒ takip eden bir tarih-zaman ┼čartnamesidir: burada bir zaman noktas─▒, bir tam datetime alan k├╝mesi (Y, M, D, H, MM, S, FS) art─▒ bir TZ (zaman dilimi ┼čartnamesi) ile belirtilir. (ayr─▒ca bir "takvim", asl─▒nda; ancak tart─▒┼čmay─▒ Gregoryen takvimi ile s─▒n─▒rlad─▒─č─▒m─▒z─▒ varsayal─▒m). Bir saat dilimi ve bir takvim birlikte (ilke olarak) bir temsilden di─čerine e┼čleme yapman─▒za izin verir. Ancak sivil ve fiziksel zaman instantlar─▒ temelde farkl─▒ b├╝y├╝kl├╝k t├╝rleridir ve kavramsal olarak ayr─▒ tutulmalar─▒ ve farkl─▒ muamele g├Ârmeleri gerekir (bir benzetme: bayt dizileri ve karakter dizileri).

Mesele kafa kar─▒┼čt─▒r─▒c─▒ ├ž├╝nk├╝ bu t├╝r olaylardan birbirinin yerine ge├žiyoruz ve medeni zamanlar siyasi de─či┼čimlere maruz kal─▒yor. Sorun (ve bu kavramlar─▒ ay─▒rt etme ihtiyac─▒) gelecekteki olaylar i├žin daha belirgin hale gelir. ├ľrnek ( burada tart─▒┼čmamdan al─▒nm─▒┼č) .

John, takviminde 2019-Jul-27, 10:30:00 , tarihin ba┼člar─▒nda , TZ = Chile/Santiago , (GMT-4'├╝ dengeleyen, dolay─▒s─▒yla UTC'ye kar┼č─▒l─▒k gelir 2019-Jul-27 14:30:00 ) bir olay i├žin bir hat─▒rlat─▒c─▒ kaydeder . Ancak gelecekte bir g├╝n, ├╝lke TZ ofsetini GMT-5 olarak de─či┼čtirmeye karar verdi.

┼×imdi, g├╝n geldi─činde ... bu hat─▒rlatma tetiklemeli

A) 2019-Jul-27 10:30:00 Chile/Santiago = UTC time 2019-Jul-27 15:30:00 ?

veya

B) 2019-Jul-27 9:30:00 Chile/Santiago = UTC time 2019-Jul-27 14:30:00 ?

Do─čru bir cevap yok, ki┼či "L├╝tfen beni aray─▒n" dedi─činde, John'un kavramsal olarak ne anlama geldi─čini bilmedi─či s├╝rece 2019-Jul-27, 10:30:00 TZ=Chile/Santiago .

"Sivil tarih zaman─▒" m─▒ demek istedi ("┼čehrimdeki saatler 10: 30'da s├Âyledi─činde")? Bu durumda, A) do─čru cevapt─▒r.

Ya da ÔÇťbir sonraki g├╝ne┼č tutulmas─▒ oldu─čundaÔÇŁ, evrenimizin devaml─▒l─▒k ├žizgisindeki bir nokta olan ÔÇťzaman─▒n fiziksel bir zaman─▒ÔÇŁ m─▒ demek istedi? Bu durumda, B cevab─▒ do─čru).

Birka├ž Tarih / Saat API'si bu ayr─▒m─▒ do─čru yapar: aralar─▒nda , sonraki (├╝├ž├╝nc├╝) Java DateTime API'nin (JSR 310) temeli olan Jodatime .


87







Endi┼čelerin mimari olarak ayr─▒lmas─▒n─▒ a├ž─▒k├ža belirtin - hangi seviyenin kullan─▒c─▒lar ile tam olarak etkile┼čime girdi─čini bilmek ve kanonik temsil i├žin (UTC) tarih / saati de─či┼čtirmek zorundad─▒r. UTC olmayan tarih-saat sunumdur (kullan─▒c─▒lar─▒n yerel saatlerini takip eder), UTC saati modeldir (arka u├ž ve orta seviyeler i├žin benzersiz kal─▒r).

Ayr─▒ca, as─▒l hedef kitlenizin ne oldu─čuna, hizmet etmek zorunda olmad─▒─č─▒n─▒za ve ├žizgiyi nereye ├žekece─činize karar verin . Orada ger├žekten ├Ânemli m├╝┼čterileriniz olmad─▒k├ža egzotik takvimlere dokunmay─▒n ve ard─▒ndan yaln─▒zca o b├Âlge i├žin ayr─▒ ayr─▒ kullan─▒c─▒ sunucular─▒n─▒ g├Âz ├Ân├╝nde bulundurun.

Kullan─▒c─▒n─▒n konumunu alabilir ve koruyabiliyorsan─▒z, sistematik tarih-zaman d├Ân├╝┼č├╝m├╝ i├žin konum kullan─▒n (.NET k├╝lt├╝r├╝ veya bir SQL tablosu s├Âyleyin) ancak tarih-kullan─▒c─▒lar─▒n─▒z i├žin kritik ├Âneme sahipse son kullan─▒c─▒n─▒n ge├žersiz k─▒lmalar─▒ se├žmesini sa─člar.

─░lgili tarihsel denetim y├╝k├╝ml├╝l├╝kleri varsa (tam olarak Jo'nun AZ'de AZ'in Eyl├╝l ay─▒nda 2 y─▒l ├Ânce bir faturay─▒ ne zaman ├Âdedi─čini s├Âylemek gibi), o zaman kay─▒t i├žin hem UTC hem de yerel zaman─▒ saklay─▒n (d├Ân├╝┼č├╝m tablolar─▒n─▒z zamanla de─či┼čecektir).

Toplu ba┼čvuru dosyalar─▒nda, web hizmetlerinde vb. Gelen veriler i├žin zaman referans─▒ zaman dilimini tan─▒mlay─▒n . Diyelim ki, Do─ču K─▒y─▒s─▒ ┼čirketinin CA'da bir veri merkezi var - hangisini varsaymak yerine bir standart olarak ne kulland─▒klar─▒n─▒ sorman─▒z ve bilmeniz gerekiyor.

Tarih diliminin metinsel temsilinde g├Âm├╝l├╝ zaman dilimi uzakl─▒klar─▒na g├╝venmeyin ve bunlar─▒ ayr─▒┼čt─▒rmay─▒ ve takip etmeyi kabul etmeyin. Bunun yerine her zaman saat dilimi ve / veya referans b├Âlgesinin a├ž─▒k├ža tan─▒mlanmas─▒n─▒ isteyin . PST ofset ile kolayca zaman alabilirsiniz, ancak zaman asl─▒nda EST'dir, ├ž├╝nk├╝ m├╝┼čterinin referans zaman─▒ ve kay─▒tlar─▒ PST'de bulunan bir sunucuya aktar─▒lm─▒┼čt─▒r.


57







Sen Olson hakk─▒nda bilmeniz gereken tz veritaban─▒nda edinilebilir, ftp://elsie.nci.nih.gov/pub http://iana.org/time-zones/ . D├╝nyadaki farkl─▒ ├╝lkelerde k─▒┼č ve yaz (standart ve g├╝n ─▒┼č─▒─č─▒ndan yararlanma) zamanlar─▒ aras─▒nda ge├ži┼č (ve olup olmad─▒─č─▒ndaki) ├žo─ču zaman son dakika de─či┼čiklikleriyle ba┼ča ├ž─▒kmak i├žin y─▒lda birka├ž kez g├╝ncellenir. 2009 y─▒l─▒nda, son s├╝r├╝m 2009'du; 2010 y─▒l─▒nda, 2010n oldu; 2011 y─▒l─▒nda, 2011n oldu; May─▒s 2012 sonunda, s├╝r├╝m 2012c oldu. Verileri ve ger├žek zaman dilimi verilerinin kendisini iki ayr─▒ ar┼čivde y├Ânetmek i├žin bir kod k├╝mesi oldu─čunu unutmay─▒n (tzcode20xxy.tar.gz ve tzdata20xxy.tar.gz). Hem kod hem de veri kamu mal─▒d─▒r.

Bu, America / Los_Angeles (ve ABD / Pasifik gibi e┼č anlaml─▒lar) gibi zaman dilimi adlar─▒n─▒n kayna─č─▒d─▒r.

Farkl─▒ b├Âlgeleri takip etmeniz gerekiyorsa, o zaman Olson veritaban─▒na ihtiyac─▒n─▒z var. Di─čerlerinin tavsiye etti─či gibi, verileri sabit bir bi├žimde de saklamak istersiniz - UTC normalde se├žilendir - verinin ├╝retildi─či zaman diliminin bir kayd─▒yla birlikte. O s─▒rada ofset UTC'den o zaman ve zaman dilimi ad─▒ aras─▒nda ayr─▒m yapmak isteyebilirsiniz; Bu daha sonra bir fark yaratabilir. Ayr─▒ca, ┼ču anda 2010-03-28T23: 47: 00-07: 00 (ABD / Pasifik) oldu─čunu bilmek, muhtemelen PST'de belirtilen 2010-11-15T12: 30 - de─čerini yorumlaman─▒za yard─▒mc─▒ olabilir veya olmayabilir. Pasifik Standart Saati (PDT) (Pasifik Yaz Saati Uygulamas─▒) yerine.

Standart C k├╝t├╝phanesi aray├╝zleri bu t├╝r ┼čeylerde korkun├ž derecede yard─▒mc─▒ de─čildir.


Olson verileri, k─▒smen AD Olson'─▒n yak─▒nda emekli olaca─č─▒ ve k─▒smen de telif haklar─▒n─▒n ihlali konusunda hak sahiplerine kar┼č─▒ (┼čimdi reddedilmi┼č) bir dava oldu─ču i├žin ta┼č─▒nm─▒┼čt─▒r. Saat dilimi veritaban─▒ ┼čimdi , ─░nternet Atanan Numaralar Kurumu olan IANA'n─▒n himayesinde y├Ânetilmektedir ve ├Ân sayfada 'Saat Dilimi Veri Taban─▒'na bir ba─člant─▒ vard─▒r . Tart─▒┼čma posta listesi ┼čimdi [email protected] ; duyuru listesi [email protected] .


39







Genel olarak, yerel zaman kaymas─▒n─▒ (DST kaymas─▒ dahil) saklanan zaman damgalar─▒na dahil edin: Zaman damgas─▒n─▒ daha sonra orijinal zaman diliminde (ve DST ayar─▒nda) g├Âr├╝nt├╝lemek istiyorsan─▒z, yaln─▒zca UTC yeterli olmaz.

Ofsetin her zaman tam say─▒ oldu─ču bir saat olmad─▒─č─▒n─▒ unutmay─▒n (├Ârne─čin, Hint Standart Saati UTC + 05: 30).

├ľrne─čin, uygun formatlar bir tuple (unix zaman─▒, dakika cinsinden uzakl─▒k) veya ISO 8601'dir .


25







"Bilgisayar zaman─▒" ve "insan zaman─▒" s─▒n─▒rlar─▒n─▒ ge├žmek bir kabustur. Bunlardan en ├Ânemlisi, saat dilimlerini ve g├╝n ─▒┼č─▒─č─▒ndan yararlanma zamanlar─▒n─▒ d├╝zenleyen kurallar i├žin bir t├╝r standart olmamas─▒d─▒r. ├ťlkeler zaman dilimlerini ve DST kurallar─▒n─▒ istedikleri zaman de─či┼čtirmekte ├Âzg├╝rd├╝rler.

Baz─▒ ├╝lkeler, ├Ârne─čin ─░srail, Brezilya, her y─▒l g├╝n ─▒┼č─▒─č─▒ndan yararlanma zamanlar─▒n─▒n ne olaca─č─▒na karar verir, bu nedenle (e─čer) DST'nin ne zaman etkili olaca─č─▒n─▒ ├Ânceden bilmek m├╝mk├╝n de─čildir. Di─čerleri, DST'nin y├╝r├╝rl├╝kte oldu─ču zamanlarla ilgili sabit (ish) kurallar koymu┼člard─▒r. Di─čer ├╝lkeler de DST'yi kullanm─▒yor.

Timonlar─▒n GMT'den tam saat fark─▒ olmas─▒ gerekmez. Nepal +5.45 +13 olan saat dilimleri bile var. Bu ┼ču demek oluyor:

 SUN 23:00 in Howland Island (-12)
MON 11:00 GMT 
TUE 00:00 in Tonga (+13)
 

Hepsi ayn─▒ saat, 3 farkl─▒ g├╝n!

Ayr─▒ca, saat dilimlerinin k─▒saltmalar─▒ ve DST'deyken nas─▒l de─či┼čtikleri konusunda net bir standart yoktur;

 AST Arab Standard Time     UTC+03
AST Arabian Standard Time  UTC+04
AST Arabic Standard Time   UTC+03
 

En iyi tavsiye, yerel zamanlardan olabildi─čince uzak durman─▒z ve m├╝mk├╝n olan yerlerde UTC'ye ba─čl─▒ kalmakt─▒r. M├╝mk├╝n olan en son anda sadece yerel saatlere d├Ân├╝┼čt├╝r├╝n.

Test yaparken, hem DST devam etmekte olan hem de DST kullanmayan bir ├╝lke (toplamda 6) ile Bat─▒ ve Do─ču yar─▒m k├╝redeki ├╝lkeleri test etti─činizden emin olun.


23







PHP i├žin:

PHP> 5.2'deki DateTimeZone s─▒n─▒f─▒ zaten ba┼čkalar─▒n─▒n bahsetti─či Olson DB'ye dayan─▒yor, bu nedenle PHP'de saat dilimi d├Ân├╝┼č├╝mleri yap─▒yorsan─▒z ve DB'de de─čil, (anlamas─▒ zor) Olson dosyalar─▒yla ├žal─▒┼čmay─▒ muaf tutuyorsunuz.

Ancak PHP, Olson DB kadar s─▒k ÔÇőÔÇőg├╝ncellenmez, bu nedenle sadece PHPÔÇÖlerin saat dilimi d├Ân├╝┼č├╝mlerini kullanmak sizi eski DST bilgileriyle b─▒rakabilir ve verilerinizin do─črulu─čunu etkileyebilir. Bu s─▒k s─▒k ger├žekle┼čmesi beklenmiyor olsa da, ortaya ├ž─▒kabilir ve edecektir kullan─▒c─▒lar─▒n d├╝nya ├žap─▒nda b├╝y├╝k ├╝ss├╝ varsa olur.

Yukar─▒daki sorunla ba┼ča ├ž─▒kmak i├žin timezonedb pecl paketini kullan─▒n , bu i┼člev PHP'nin saat dilimi verilerini g├╝ncellemektir. Bu paketi g├╝ncelle┼čtirildi─či kadar s─▒k ÔÇőÔÇőy├╝kleyin. (Bu paket g├╝ncellemelerinin Olson g├╝ncellemelerini tam olarak takip edip etmedi─činden emin de─čilim, ancak en az─▒ndan Olson g├╝ncellemelerine ├žok yak─▒n bir frekansta g├╝ncelleniyor gibi g├Âr├╝n├╝yor.)


20







Tasar─▒m─▒n─▒z buna uygunsa, hep birlikte yerel zaman d├Ân├╝┼č├╝m├╝nden ka├ž─▒n─▒n!

Bunun kula─ča ├ž─▒lg─▒nca gelebilece─čini biliyorum ama UX'i d├╝┼č├╝n├╝n: kullan─▒c─▒lar yak─▒n, g├Âreceli tarihlere (bug├╝n, d├╝n, gelecek pazartesi) mutlak tarihlerden (2010.09.17, Cuma 17 Eyl├╝l) daha k─▒sa s├╝rede yakla┼č─▒r. Ve daha fazla d├╝┼č├╝nd├╝─č├╝n├╝zde, saat dilimlerinin (ve DST) do─črulu─ču tarihin yak─▒nl─▒─č─▒na daha ├Ânemlidir now() , bu nedenle tarih / tarih / aylar─▒ g├Âreli bir formatta +/- 1 veya 2 hafta boyunca ifade edebiliyorsan─▒z, tarihler UTC olabilir ve kullan─▒c─▒lar─▒n% 95'i ├žok fazla ├Ânemli olmaz.

Bu ┼čekilde t├╝m tarihleri ÔÇőÔÇőUTC'ye kaydedebilir ve nispi kar┼č─▒la┼čt─▒rmalar─▒ UTC'de yapabilir ve kullan─▒c─▒lara UTC tarihlerini G├Âreli Tarih E┼či─činizin d─▒┼č─▒nda g├Âsterebilirsiniz.

Bu ayn─▒ zamanda kullan─▒c─▒ giri┼či i├žin de ge├žerli olabilir (ancak genellikle daha s─▒n─▒rl─▒ bir ┼čekilde). Sadece {D├╝n, Bug├╝n, Yar─▒n, Gelecek Pazartesi, Gelecek Per┼čembe} olan bir a├ž─▒l─▒r men├╝den se├žim yapmak kullan─▒c─▒ i├žin bir tarih se├žiciden ├žok daha kolay ve kolayd─▒r. Tarih toplay─▒c─▒lar─▒, form doldurman─▒n en ├žok ac─▒ veren bile┼čenlerinden baz─▒lar─▒d─▒r. Elbette bu t├╝m durumlar i├žin i┼če yaramayacak, ancak onu ├žok g├╝├žl├╝ k─▒lmak i├žin sadece biraz ak─▒ll─▒ca bir tasar─▒m gerektirdi─čini g├Ârebilirsiniz.


17







Denememi┼č olmama ra─čmen, zorlay─▒c─▒ bulaca─č─▒m zaman dilimi ayarlar─▒na bir yakla┼č─▒m ┼č├Âyle olacakt─▒r:

  1. Her ┼čeyi UTC'de saklay─▒n.

  2. TZOffsets ├ť├ž s├╝tunlu bir tablo olu┼čturun : RegionClassId, StartDateTime ve OffsetMinutes (int, dakika cinsinden).

Tabloda, yerel saatin de─či┼čti─či tarih ve saatlerin bir listesini ve ne kadar bulundu─čunu saklay─▒n . Tablodaki b├Âlge say─▒s─▒ ve tarih say─▒s─▒, d├╝nyan─▒n hangi tarih ve alanlar─▒n─▒ desteklemeniz gerekti─čine ba─čl─▒ olacakt─▒r. Tarihin gelece─či baz─▒ pratik s─▒n─▒rlara dahil etmesi gerekmesine ra─čmen, bunu "tarihi" bir tarih gibi d├╝┼č├╝n├╝n.

Herhangi bir UTC saatinin yerel saatini hesaplaman─▒z gerekti─činde, sadece ┼čunu yap─▒n:

 SELECT DATEADD('m', SUM(OffsetMinutes), @inputdatetime) AS LocalDateTime
FROM   TZOffsets
WHERE  StartDateTime <= @inputdatetime
       AND RegionClassId = @RegionClassId;
 

Bu tabloyu uygulaman─▒zda ├Ânbelle─če almak ve veritaban─▒n─▒ vurmak yerine sorgular─▒ yapmak i├žin LINQ veya benzeri bir ara├ž kullanmak isteyebilirsiniz.

Bu veri kamuya a├ž─▒k tz veritaban─▒ndan dam─▒t─▒labilir .

Bu yakla┼č─▒m─▒n avantajlar─▒ ve dipnotlar─▒:

  1. Hi├žbir kural kodda belirtilmez, yeni b├Âlgeler veya tarih aral─▒klar─▒ i├žin ofsetleri kolayca ayarlayabilirsiniz.
  2. Her tarih veya b├Âlgeyi desteklemeniz gerekmez, bunlar─▒ gerekti─či gibi ekleyebilirsiniz.
  3. B├Âlgelerin do─črudan jeopolitik s─▒n─▒rlara uymas─▒ gerekmez ve sat─▒rlar─▒n yinelenmesini ├Ânlemek i├žin (├Ârne─čin, ABD'deki ├žo─ču eyalette DST ayn─▒ ┼čekilde kullan─▒l─▒r), ba┼čka bir tabloda daha geleneksel listelerine ba─članan geni┼č RegionClass giri┼člerine sahip olabilirsiniz. devletler, ├╝lkeler vb.
  4. DST'nin ba┼člang─▒├ž ÔÇőÔÇőve biti┼č tarihinin son birka├ž y─▒lda de─či┼čti─či ABD gibi durumlar i├žin, bunun ├╝stesinden gelmek olduk├ža kolayd─▒r.
  5. StartDateTime alan─▒ da bir zaman depolayabildi─činden, 2:00 AM standart de─či┼čtirme zaman─▒ kolayca idare edilir.
  6. D├╝nyan─▒n her yerinde 1 saatlik bir DST kullan─▒lmaz. Bu, bu davalar─▒ kolayca idare eder.
  7. Veri tablosu ├žapraz platformdur ve hemen hemen her veritaban─▒ platformunu veya programlama dilini kullanan geli┼čtiriciler taraf─▒ndan kullan─▒labilecek ayr─▒ bir a├ž─▒k kaynakl─▒ proje olabilir.
  8. Bu, zaman dilimleri ile ilgisi olmayan ofsetler i├žin kullan─▒labilir. ├ľrne─čin, zaman zaman D├╝nya'n─▒n rotasyonuna, Gregoryen takviminde ve Gregoryen takviminde yap─▒lan tarihsel d├╝zenlemelere vb. Uyum sa─člamak i├žin zaman zaman olan 1 saniyelik ayarlamalar.
  9. Bu bir veri taban─▒ tablosunda oldu─čundan, standart rapor sorgular─▒ vb. ─░┼č mant─▒─č─▒ kodu ├╝zerinde bir yolculuk yapmadan verilerden yararlanabilir.
  10. Bu, zaman dilimi ofsetlerini, ister isterseniz de ele al─▒r ve bir b├Âlgenin ba┼čka bir zaman dilimine atand─▒─č─▒ ├Âzel tarihi durumlar─▒ bile hesaba katabilir. ─░htiyac─▒n─▒z olan tek ┼čey, minimum ba┼člang─▒├ž ÔÇőÔÇőtarihi olan her b├Âlgeye bir saat dilimi uzakl─▒─č─▒ atayan bir ba┼člang─▒├ž ÔÇőÔÇőtarihi. Bu, her bir zaman dilimi i├žin en az bir b├Âlge olu┼čturmay─▒ gerektirir, ancak ┼ču gibi ilgin├ž sorular sorman─▒za izin verir: "2 ┼×ubat 1989'da saat 17: 00'de Yuma, Arizona ve Seattle, Washington aras─▒ndaki yerel saat aras─▒ndaki fark nedir?" (Sadece bir SUM () di─čerinden ├ž─▒kar─▒n).

┼×imdi, bu yakla┼č─▒m─▒n tek dezavantaj─▒ ya da ba┼čka d├Ân├╝┼č├╝mleri olmas─▒d─▒r gelen saatine Negatif bir olan herhangi DST de─či┼čikli─či beri yerel saat GMT, m├╝kemmel olmayan tekrarlar verilen bir yerel saati. Bununla ba┼ča ├ž─▒kman─▒n kolay bir yolu yok, korkar─▒m, yerel zamanlar─▒ saklaman─▒n bir nedeni de ilk ba┼čta k├Ât├╝ haberler.


15







Buna ÔÇťvardiya planlama sistemleri (├Ârne─čin fabrika i┼č├žileri)ÔÇŁ ve ÔÇťgaz ba─č─▒ml─▒ y├Ânetim sistemleriÔÇŁ olmak ├╝zere iki t├╝r sistemde ├žarpt─▒m.

23 ve 25 saatlik uzun g├╝nler ba┼ča ├ž─▒kmak i├žin bir ac─▒d─▒r, yani 7 saat veya 9 saat s├╝ren 8 saat de─či┼čimleridir. Sorun, her bir m├╝┼čterinin, hatta m├╝┼čterinin departman─▒n─▒n, bu ├Âzel durumlarda ne yapt─▒klar─▒ konusunda (genellikle belgelenmeden) yaratt─▒klar─▒ farkl─▒ kurallara sahip oldu─čunu g├Âreceksiniz.

Baz─▒ sorular, m├╝┼čteriden ÔÇťraf d─▒┼č─▒ÔÇŁ yaz─▒l─▒m─▒n─▒z i├žin ├Âdeme yapana kadar sorulmamas─▒ en iyisidir. Yaz─▒l─▒m sat─▒n al─▒rken bu t├╝r sorunlar─▒ ├Ân plana ├ž─▒karan bir m├╝┼čteri bulmak ├žok nadirdir.

Bence her durumda UTC'ye zaman kaydetmeli ve tarih / saati kaydetmeden ├Ânce yerel saate / yerel saate d├Ân├╝┼čt├╝rmelisiniz. Bununla birlikte, belirli bir s├╝renin hangisinde oldu─čunu bilmek bile, G├╝n─▒┼č─▒─č─▒ tasarrufu ve zaman dilimleri ile zor olabilir.


14







Ge├ženlerde bir Web uygulamas─▒nda bir Ajax'ta post-back tarihinin sunucu taraf─▒ koduma geri d├Ând├╝─č├╝ tarihin hizmet verdi─čim saatten farkl─▒ oldu─ču bir problem ya┼čad─▒m.

B├╝y├╝k olas─▒l─▒kla, istemciye dize olarak geri g├Ânderme i├žin tarih olu┼čturmakta olan istemcideki JavaScript kodumla yapmak zorunda kald─▒m, ├ž├╝nk├╝ JavaScript saat dilimini ve g├╝n ─▒┼č─▒─č─▒ndan yararlanma ayarlar─▒n─▒ ve baz─▒ taray─▒c─▒larda da g├╝n ─▒┼č─▒─č─▒ndan yararlanma uygulamas─▒n─▒n hesaplanmas─▒n─▒ ayarl─▒yordu. di─čerlerinden daha farkl─▒ g├Âr├╝n├╝yordu.

Sonunda, istemcideki tarih ve saat hesaplamalar─▒n─▒ tamamen kald─▒rmay─▒ se├žtim ve daha sonra tutarl─▒ bir d├Ân├╝┼čt├╝rmeye izin vermek i├žin sunucudaki tarih saatine ├ževrilen bir tam say─▒ anahtar─▒nda sunucuma geri g├Ânderdim.

Bundan ├Â─črendi─čim: Siz kesinlikle gerekmedik├že, JavaScript tarih ve saat hesaplamalar─▒n─▒ web uygulamalar─▒nda kullanmay─▒n.


13







Web siteleri ve di─čer arka u├ž hizmetleri de dahil olmak ├╝zere bir sunucu ├╝zerinde ├žal─▒┼čan uygulamalar s├Âz konusu oldu─čunda , sunucunun saat dilimi ayar─▒ uygulama taraf─▒ndan g├Âz ard─▒ edilmelidir.

Ortak ├Âneri, sunucunun saat dilimini UTC'ye ayarlamakt─▒r. Bu ger├žekten iyi bir en iyi uygulamad─▒r, ancak di─čer en iyi uygulamalar─▒ takip etmeyen uygulamalar i├žin bir yard─▒m grubu olarak var. ├ľrne─čin, UTC tabanl─▒ zaman damgalar─▒ yerine yerel zaman damgalar─▒ olan dosyalar─▒ g├╝nl├╝─če kaydetmek i├žin bir hizmet yaz─▒yor olabilir, bu sayede g├╝n ─▒┼č─▒─č─▒ndan yararlanma saati d├╝┼čme ge├ži┼či s─▒ras─▒nda belirsizlikler yaratabilir. Sunucunun saat dilimini UTC olarak ayarlamak bu uygulamay─▒ d├╝zeltir . Ancak as─▒l ├ž├Âz├╝m, uygulaman─▒n ba┼člamas─▒ i├žin UTC kullanarak oturum a├žmas─▒ olacakt─▒r.

Web siteleri de dahil olmak ├╝zere sunucu taraf─▒ kodu, sunucunun yerel saat diliminin ├Âzel bir ┼čey olmas─▒n─▒ asla beklememelidir.

Baz─▒ dillerde, yerel saat dilimi uygulama koduna kolayca s├╝r├╝nebilir. ├ľrne─čin, DateTime.ToUniversalTime .NET y├Ântem d├Ân├╝┼čt├╝recektir gelen UTC yerel saat diliminde ve DateTime.Now m├╝lkiyet yerel saat dilimindeki saati d├Ând├╝r├╝r. Ayr─▒ca, Date JavaScript'teki yap─▒c─▒ bilgisayar─▒n yerel saat dilimini kullan─▒r. Bunun gibi bir├žok ba┼čka ├Ârnek var. Bilgisayar─▒n yerel saat dilimi ayar─▒n─▒ kullanan kodlardan ka├ž─▒narak, savunma programlamas─▒ yapmak ├Ânemlidir.

Masa├╝st├╝ uygulamalar─▒, mobil uygulamalar ve istemci taraf─▒ JavaScript gibi m├╝┼čteri taraf─▒ kodu i├žin yerel saat dilimini kullanarak rezerve edin.


12







Web i├žin kurallar o kadar da karma┼č─▒k de─čil.

  • Sunucu taraf─▒nda, UTC'yi kullan─▒n
  • M├╝┼čteri taraf─▒nda, Olson kullan
    • Sebep: UTC-ofsetleri, g├╝n ─▒┼č─▒─č─▒ndan yararlanma a├ž─▒s─▒ndan g├╝venli de─čildir (├Ârne─čin, New York y─▒l─▒n EST (UTC - 5 Saat) k─▒sm─▒d─▒r, EDT (UTC - 4 Saat) y─▒l─▒n geri kalan─▒d─▒r).
    • ─░stemci taraf─▒ saat dilimi belirlemesi i├žin iki se├žene─činiz vard─▒r:
      • 1) Kullan─▒c─▒ ayar b├Âlgesi (Daha G├╝venli) olsun
      • 2) Otomatik b├Âlge tespit

Gerisi sunucu taraf─▒ datetime kitapl─▒klar─▒n─▒z─▒ kullanarak sadece UTC / yerel d├Ân├╝┼č├╝md├╝r. Gitmek g├╝zel ...


11







Sunucular─▒n─▒z─▒ UTC'ye ayarl─▒ tutun ve hepsinin ntp veya e┼čde─čeri i├žin yap─▒land─▒r─▒ld─▒─č─▒ndan emin olun.

UTC g├╝n ─▒┼č─▒─č─▒ndan yararlanma saati sorunlar─▒ndan ka├ž─▒n─▒r ve senkronizasyon d─▒┼č─▒ sunucular te┼čhis edilmesi biraz zaman alan beklenmeyen sonu├žlara neden olabilir.


10







FAT32 dosya sisteminde depolanan zaman damgalar─▒ ile ilgilenirken dikkatli olun - yerel zaman koordinatlar─▒nda (DST dahil - msdn makalesine bak─▒n─▒z ) daima kal─▒c─▒d─▒r . Buna yak─▒ld─▒m.


9







Ba┼čka bir ┼čey, sunucular─▒n g├╝ncel g├╝n ─▒┼č─▒─č─▒ tasarruf yamas─▒ uygulanm─▒┼č oldu─čundan emin olun.

UTC tabanl─▒ bir sistem kullan─▒yor olsak da ge├žen y─▒l, Kuzey Amerika kullan─▒c─▒lar─▒ i├žin ├╝├ž haftal─▒k bir s├╝re boyunca saatlerimizin bir saat aral─▒ks─▒z s├╝rd├╝─č├╝ bir durum vard─▒.

Sonunda sunucular oldu─ču ortaya ├ž─▒kt─▒. Sadece g├╝ncel bir yaman─▒n uygulanmas─▒na ihtiya├ž duyuyorlard─▒ ( Windows Server 2003 ).


7







PHP'nin DateTimeZone::listAbbreviations() ├ž─▒kt─▒s─▒

Bu PHP y├Ântemi, kendi ba┼člar─▒na daha spesifik 'co─črafi' zaman dilimleri (Avrupa / Amsterdam gibi) i├žeren baz─▒ 'b├╝y├╝k' ÔÇőÔÇőzaman dilimleri (CEST gibi) i├žeren bir ili┼čkisel dizi d├Ând├╝r├╝r.

Bu zaman dilimlerini ve ofset / DST bilgilerini kullan─▒yorsan─▒z, a┼ča─č─▒dakileri ger├žekle┼čtirmek son derece ├Ânemlidir:

Her bir zaman diliminin t├╝m farkl─▒ ofset / DST yap─▒land─▒rmalar─▒ (tarihsel yap─▒land─▒rmalar dahil) dahil edilmi┼č gibi g├Âr├╝n├╝yor !

├ľrne─čin, Avrupa / Amsterdam bu fonksiyonun ├ž─▒kt─▒s─▒nda alt─▒ kez bulunabilir. ─░ki olay (ofset 1172/4772), 1937'ye kadar kullan─▒lan Amsterdam zaman─▒ i├žindir; iki tanesi (1200/4800), 1937 ve 1940 aras─▒nda kullan─▒lan zaman i├žindir; ve iki tanesi (3600/4800) 1940ÔÇÖtan bu yana kullan─▒lan zaman i├žindir.

Bu nedenle, bu i┼člev taraf─▒ndan d├Ând├╝r├╝len ofset / DST bilgilerine ┼ču anda do─čru / kullan─▒mda oldu─čuna g├╝venemezsiniz !

Belirli bir saat diliminin ge├žerli ofsetini / DST'sini bilmek istiyorsan─▒z, bunun gibi bir ┼čey yapman─▒z gerekir:

 <?php
$now = new DateTime(null, new DateTimeZone('Europe/Amsterdam'));
echo $now->getOffset();
?>
 

6







Etkin DST ile ├žal─▒┼čan veritaban─▒ sistemlerini s├╝rd├╝r├╝yorsan─▒z, sonbaharda ge├ži┼č s─▒ras─▒nda kapat─▒lmalar─▒ gerekip gerekmedi─čini dikkatlice kontrol edin. Mandy DBS (ya da di─čer sistemler) ayn─▒ noktay─▒ (yerel) iki kez ge├žmekten ho┼članmazlar; bu, saati sonbaharda geriye d├Ând├╝rd├╝─č├╝n├╝zde olan ┼čeydir. SAP bunu (IMHO ger├žekten temiz) bir ge├žici ├ž├Âz├╝mle ├ž├Âzd├╝ - saati geri ├ževirmek yerine, i├ž saatin iki saat boyunca normal h─▒z─▒n yar─▒s─▒nda ├žal─▒┼čmas─▒na izin verdiler ...


5







─░┼č kurallar─▒ her zaman medeni zamanda ├žal─▒┼čmal─▒d─▒r (aksi belirtilmedi─či s├╝rece mevzuat). Sivil zaman─▒n bir karma┼ča oldu─čunun fark─▒nda olun, ama insanlar─▒n kulland─▒─č─▒ ┼čey bu y├╝zden ├Ânemli olan bu.

Dahili olarak, zaman damgalar─▒n─▒ medeni zamandan-saniyeden-├ža─ča benzer bir ┼čeyde tutun. D├Ânem ├Ânemli de─čil ├Âzellikle (─▒ tercih yapar Unix ├ža─č─▒ ) ama alternatifinden daha kolay yapmak ┼čeyler yapar. Bu davran s─▒├žrama-saniye oldu─ču bir ┼čey yap─▒yoruz s├╝rece yoktur ger├žekten onlar─▒ (├Ârne─čin uydu izleme) ihtiyac─▒ vard─▒r. Zaman damgalar─▒ ve g├Âr├╝nt├╝lenen zaman aras─▒ndaki e┼čleme, DST kurallar─▒n─▒n uygulanmas─▒ gereken tek noktad─▒r ; Kurallar s─▒kl─▒kla de─či┼čir (k├╝resel d├╝zeyde, y─▒lda birka├ž kez; politikac─▒lar─▒ su├žlar), bu nedenle haritay─▒ zorlamad─▒─č─▒n─▒zdan emin olmal─▒s─▒n─▒z. Olson'un TZ veritaban─▒ paha bi├žilmezdir.


5







.NET framework kullan─▒yor musunuz ? ├ľyleyse, sizi .NET 3.5 ile eklenen DateTimeOffset t├╝r├╝yle tan─▒┼čt─▒rmama izin verin .

Bu yap─▒, hem tarihi hem de saat ile Koordineli Evrensel Saat (UTC) aras─▒ndaki fark─▒ belirten bir DateTime ve Ofset ( ) i├žerir. TimeSpan DateTimeOffset

  • DateTimeOffset.Now Statik y├Ântemi d├Ânecektir DateTimeOffset ak─▒m (yerel) zaman olu┼čan ├Ârne─čini ve (i┼čletim sisteminin b├Âlgesel bilgi belirtildi─či gibi) ofset yerel.

  • DateTimeOffset.UtcNow Statik y├Ântemi d├Ânecektir DateTimeOffset (e─čer Greenwich sanki) UTC'de ┼čimdiki zaman olu┼čan ├Ârne─čini.

Di─čer yararl─▒ t├╝rler, TimeZone ve TimeZoneInfo s─▒n─▒flar─▒d─▒r.


4







.NET'te bununla m├╝cadele edenler i├žin , kullanmaya DateTimeOffset ve / veya kullanmaya TimeZoneInfo de─čer olup olmad─▒─č─▒na bak─▒n .

IANA / Olson zaman dilimlerini kullanmak istiyorsan─▒z veya yerle┼čik t├╝rleri gereksinimleriniz i├žin yetersiz bulmak istiyorsan─▒z, .NET i├žin daha ak─▒ll─▒ bir tarih ve saat API'si sunan Noda Time'─▒ inceleyin .


4







Sadece yanl─▒┼č veya en az─▒ndan kafa kar─▒┼čt─▒r─▒c─▒ g├Âr├╝nen iki ┼čeye dikkat ├žekmek istedim:

Her zaman g├╝n ─▒┼č─▒─č─▒ndan yararlanmalardan etkilenmeyen bir standarda g├Âre zaman─▒n─▒z─▒ koruyun. GMC ve UTC farkl─▒ insanlar taraf─▒ndan dile getirilmi┼č olsa da, UTC en s─▒k belirtildi─či g├Âr├╝l├╝yor.

(Hemen hemen) t├╝m pratik bilgi i┼člem ama├žlar─▒ i├žin UTC, asl─▒nda GMT'dir. Kesirli saniyeli bir zaman damgas─▒ g├Ârmezseniz, bu ayr─▒m─▒ gereksiz k─▒lan GMT ile u─čra┼č─▒yorsunuzdur.

Zaman damgalar─▒n─▒ depolarken yerel zaman kaymas─▒n─▒ oldu─ču gibi (DST kaymas─▒ dahil) ekleyin.

Bir zaman damgas─▒ her zaman GMT'de temsil edilir ve bu nedenle ofseti yoktur.


2







─░┼čte benim deneyimim: -

(Herhangi bir ├╝├ž├╝nc├╝ taraf k├╝t├╝phanesi gerektirmez)

  • Sunucu taraf─▒nda, zamanlar─▒ UTC format─▒nda saklay─▒n, b├Âylece veritaban─▒ndaki t├╝m tarih / saat de─čerleri, kullan─▒c─▒lar─▒n, sunucular─▒n, saat dilimlerinin veya DST konumlar─▒ndan ba─č─▒ms─▒z olarak tek bir standartta olur.
  • UI katman─▒nda veya kullan─▒c─▒ya g├Ânderilen e-postalarda, kullan─▒c─▒ya g├Âre zaman g├Âstermeniz gerekir. Bu nedenle, kullan─▒c─▒n─▒n yerel saatine yol a├žacak veritaban─▒n─▒ UTC de─čerine ekleyebilmeniz i├žin kullan─▒c─▒n─▒n saat diliminin ofsetine sahip olman─▒z gerekir. Kaydolduklar─▒nda kullan─▒c─▒n─▒n saat dilimini kaybedebilir veya web ve mobil platformlarda bunlar─▒ otomatik olarak tespit edebilirsiniz. Web siteleri i├žin, JavaScript'in i┼člevi getTimezoneOffset () y├Ântemi, s├╝r├╝m 1.0'dan bu yana bir standartt─▒r ve t├╝m taray─▒c─▒larla uyumludur. (Ref: http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp )

2







Tom Scott'un , Computerphile kanal─▒ndaki YouTube'daki saat dilimleri hakk─▒ndaki videosunda konunun ho┼č ve e─členceli bir a├ž─▒klamas─▒ da var. ├ľrnekler ┼čunlar─▒ i├žerir:

  • Pasifik Okyanusu'ndaki bir ada olan Samoa , Avustralya ve Yeni Zelanda ile ticaret yapmay─▒ kolayla┼čt─▒rmak i├žin saat dilimini 24 saat ileri kayd─▒rd─▒,
  • 2 insan n├╝fusunun farkl─▒ zaman dilimlerini takip etti─či Bat─▒ ┼×eria ,
  • 18. y├╝zy─▒l, J├╝lyen takviminden Gregoryen takvimine (20. y├╝zy─▒lda Rusya'da olan) de─či┼čmi┼čtir.

2







Asl─▒nda, kernel32.dll SystemTimeToTzSpecificLocation ├Â─česini d─▒┼ča aktarmaz. Ancak, a┼ča─č─▒daki iki dosyay─▒ d─▒┼ča aktar─▒r: SystemTimeToTzSpecificLocalTime ve TzSpecificLocalTimeToSystemTime ...


1







Asla yaln─▒zca a┼ča─č─▒daki gibi yap─▒c─▒lara g├╝venmeyin

  new DateTime(int year, int month, int day, int hour, int minute, TimeZone timezone)
 

DST nedeniyle belirli bir tarih saatinin mevcut olmad─▒─č─▒ durumlarda istisnalar atabilirler. Bunun yerine, bu tarihler olu┼čturmak i├žin kendi y├Ântemlerinizi olu┼čturun. Onlarda, DST nedeniyle meydana gelen herhangi bir istisnay─▒ yakalay─▒n ve ge├ži┼č ofsetiyle gereken s├╝reyi ayarlay─▒n. DST, zaman dilimine g├Âre farkl─▒ tarihlerde ve farkl─▒ saatlerde (Brezilya i├žin gece yar─▒s─▒ bile) olu┼čabilir.


1







Ta┼č─▒ma zaman─▒n─▒n a├ž─▒klanan ├žok b├╝y├╝k kar─▒┼č─▒kl─▒k oldu─čunu ve asla endi┼čelenemeyece─činizi kan─▒tlamak i├žin bir ├Ârnek. Bu sayfadaki birka├ž noktada art─▒k saniye g├Âz ard─▒ edildi.

Birka├ž y─▒l ├Ânce, Android i┼čletim sistemi UTC zaman referans─▒ almak i├žin GPS uydular─▒n─▒ kulland─▒, ancak GPS uydular─▒n─▒n art─▒k saniye kullanmad─▒─č─▒ ger├že─čini g├Âz ard─▒ etti. Y─▒lba┼č─▒ gecesi, Apple telefon kullan─▒c─▒lar─▒ ve Android telefon kullan─▒c─▒lar─▒n─▒n geri say─▒mlar─▒n─▒ yakla┼č─▒k 15 saniye aral─▒klarla yapt─▒klar─▒ zaman, hi├ž kimse kafa kar─▒┼č─▒kl─▒─č─▒na kadar fark etmedi.

San─▒r─▒m o zamandan beri d├╝zeltildi, ancak bu 'k├╝├ž├╝k detaylar─▒n' sizi ne zaman rahats─▒z edeceklerini asla bilemezsiniz.


1







  • Yerel zaman, UTC struct tm dengesi olmadan (veya zaman dilimine referans olarak) asla - asla FAT32 ve C de dahil edilmemesinin ├Ârnekleri
  • Bir saat diliminin bir birle┼čimi oldu─čunu anlay─▒n
    • bir UTC ofset seti (├Ârne─čin, k─▒┼č─▒n +0100, yaz aylar─▒nda +0200)
    • Ge├ži┼čin ne zaman yap─▒ld─▒─č─▒na ili┼čkin kurallar (zamanla de─či┼čebilir: ├Ârne─čin, 1990'larda AB, ge├ži┼č tarihinin Mart ve Ekim aylar─▒nda, en ge├ž 02: 00/03: 00ÔÇÖdaki DSTÔÇÖde oldu─ču gibi uyumla┼čt─▒rd─▒; ├╝ye devletler aras─▒nda).

┬╣ Baz─▒ uygulamalar struct tm UTC ofsetini kaydeder, ancak bu standarda getirmedi.


1







Veritabanlar─▒yla ilgili olarak (├Âzellikle MySQL , ancak bu ├žo─ču veritaban─▒na uygulan─▒r), UTC'yi depolamay─▒ zor buldum.

  • Veritabanlar─▒ genellikle varsay─▒lan sunucu tarihiyle ├žal─▒┼č─▒r (yani, CURRENT_TIMESTAMP).
  • Sunucu saat dilimini de─či┼čtiremeyebilirsiniz.
  • Saat dilimini de─či┼čtirebilseniz bile, sunucu saat diliminin yerel olmas─▒n─▒ bekleyen ├╝├ž├╝nc├╝ taraf kodunuz olabilir.

Sunucunun tarih saatini veritaban─▒nda depolamay─▒ daha kolay buldum, ard─▒ndan veritaban─▒n─▒n depolanan tarih saatini UTC'ye (yani, UNIX_TIMESTAMP ()) SQL deyimlerinde d├Ân├╝┼čt├╝rmesini sa─člad─▒m. Bundan sonra datetime kodunu UTC olarak kullanabilirsiniz.

Sunucu ve t├╝m kod ├╝zerinde% 100 kontrol├╝n├╝z varsa, sunucu saatini UTC olarak de─či┼čtirmek daha iyi olur.


-4



─░lgili yay─▒nlar


Birim testi adland─▒rma en iyi uygulamalar─▒ [kapal─▒]

En iyi uygulamalar─▒ g├╝nl├╝─če kaydetme [kapal─▒]

Twitter Bootstrap ├ľzelle┼čtirme En ─░yi Uygulamalar─▒ [kapal─▒]

Nesneye Dayal─▒ Javascript en iyi uygulamalar─▒? [kapal─▒]

Favori (Zeki) Defansif Programlama En ─░yi Uygulamalar─▒ [kapal─▒]

DST'nin (Yaz Saati) etkin olup olmad─▒─č─▒ ve ofsetinin ne oldu─ču kontrol edilir?

MySQL tarihsaat alanlar─▒ ve g├╝n ─▒┼č─▒─č─▒ndan yararlanma saati - ÔÇťekstraÔÇŁ saate nas─▒l ba┼čvurabilirim?

TimeZoneInfo G├╝nd├╝z Tasarruf Zaman─▒ s─▒ras─▒nda yerel saati almak i├žin nas─▒l kullan─▒l─▒r?

UTC g├╝n ─▒┼č─▒─č─▒ndan yararlanma saati g├Âzlemliyor mu?

Spark kod organizasyonu ve en iyi uygulamalar [kapal─▒]

Etiketle ilgili di─čer sorular [datetime]


Ba─č─▒ml─▒l─▒k enjeksiyonu nedir?

Git ile de─či┼čen birden fazla dosyadan sadece bir tanesini sakla.

Neden elementwise eklemeler ayr─▒ d├Âng├╝lerde birle┼čik d├Âng├╝de oldu─čundan ├žok daha h─▒zl─▒?

Python'da terminaldeki renkli metinler nas─▒l yazd─▒r─▒l─▒r?

Kod snippet'lerini MS Word'de bi├žimi ve s├Âzdizimi vurgulamas─▒n─▒ koruyarak nas─▒l g├Âr├╝nt├╝lersiniz?

Python'da switch deyimi i├žin de─či┼čtirmeler?

Dinamik h├╝cre d├╝zenleri ve de─či┼čken sat─▒r y├╝kseklikleri i├žin UITableView'da Otomatik Mizanpaj─▒ kullanma

C# ile g├Âreceli zaman─▒ hesapla

Equals y├Ântemi ge├žersiz k─▒l─▒nd─▒─č─▒nda GetHashCode'u ge├žersiz k─▒lmak neden ├Ânemlidir?

Bir curl ├ža─čr─▒s─▒ yoluyla bir HTTP iste─či kullanarak bir ba┼čl─▒k nas─▒l g├Ânderilir?