Er ya da geç, her programcı zaman dilimleri ile uğraşmak zorundadır.
Ve benim bu konuda çok fazla tavsiyem yok; ama uyarı olsun diye bir öykü anlatabilirim.
Size eğer bir şekilde yapmaktan kurtulabiliyorsanız neden asla zaman dilimleriyle uğraşmamanız gerektiğini söyleyebilirim.
Birinin bir uygulama yazdığını düşünelim,
bir şeyin kaç saniye geçmişte olduğunu hesaplamanıza yarayan bir uygulama.
Bir tarih ve bir saat yazıyorsunuz, uygulama kaç saniye olduğunu söylüyor.
Sonra programcı buna baktığında "Tamam, bu benim için çalışıyor." diye düşünür.
"Ama saat dilimini değiştirmeyi sağlayan küçük bir kutu ekleyelim."
Böylece eğer şu anki New York'u, 5 gün önceki Londra'dayla karşılaştırıyorsan, bir çaresini bulabilirsin.
Bunda bir sorun yok - küçük bir açılır menü Greenwich'in kaç saat ötesinde ya da ardında olduğunu seçmeni sağlar.
Harika.
Biraz ünlenince, er ya da geç, Avustralya'dan bir telefon alır.
Ve Avustralya der ki "Merhabalar ef--"
- Aksanlı konuşmaya çalışmayacağım.
Aksanlı konuşmayı denememeliyim.
Avustralya der ki "Merhaba!"
"Bu arada, biz Greenwich'in 9 buçuk saat önündeyiz."
Ve programcı der ki "Gerçekten mi?"
"Evet, 9 buçuk saat."
"Tamam, senin için bir özel durum ekleyeceğim. Sorun değil."
Bir süre sonra, Nepal'den biri arar.
Ve onlar da derler ki, "Merhaba. Biz Greenwich'in 5 saat 15 dakika önündeyiz."
Programcı der ki "Gerçekten mi?" "Evet, biz yıllardır böyle! Evet, 5 saat 15 dakika!"
Harika. Tamam. Ve onlar bir özel durum daha koyar. Ve belki zaman dilimlerinin
listesine bakar. Her şeyi belirten
Kanonik Liste'ye bakar ve dünyadaki her zaman dilimini eklediğinden emin olur.
Ve sonra Sonbahar gelir.
Ve İngiltere'den bir telefon alır.
Ve İngiltere der ki "Afedersiniz. Bir saat gerideyiz, ne oldu?"
"Saat sadece değişti tutun!"
"Bu iyi - hayır, biz ele."
"Biz yaz saati bizim için değiştiğinde bir not etti ve biz bu koyduk!"
Ve İngiltere "Hayır, yaz saati bizim için bir hafta önce değişiklikleri görüyoruz." Diyecek
"Bu nerede yaşadığınıza bağlı olarak farklı."
"Bunu yapmadan önce bir hafta geri saatler kaydırır."
Ve bu noktada
genellikle programcı ellerinde kafa tutacak başlayacak
ve onlar kendilerini ele verdik ne olduğunu fark.
Ve bu iyi! Onlar koymak gerekir
ve onlar her ülkenin farklı bir gün, yaz saati geçilmesi ele alacağız.
Onlar bunu ve onlar bütün bu kopya edeceğiz bunları nasıl söyler dosyası bakacağız.
Sonra tekrar kim diyecekler güney yarımkürede birinden bir çağrı alırsınız
"Evet, biz ileriye kayması Sonbaharda geri vites değiliz."
"Bizim bahar ... Kasım ayında" dedi.
Bu noktada genellikle kendi seçtikleri sarhoş edici özlemle bakıyor başlayacağız
ve gittikleri tutmak önce hızlı bir içki olup olmadığını merak ...
... Ve onlar da bu kod olacak.
Sonra Samoa bir çağrı alırsınız.
uluslararası tarih hattı üzerinde Pasifik dışarı.
Ve Samoa "Merhaba!" Diyecekler
"Evet, biz diğer yıl bir gün atlandı."
Ve programcı "ne?" Diyecek
"Evet, biz bir gün atlanır. Biz 31 Aralık için 29 Aralık 2011 gitti."
"Biz Greenwich arkasında saatlerce olmaktan uluslararası tarih hattının bir tarafı kaymıştır ...
... Öncesinde Greenwich saat ve saat olmak. Avustralya ile ticaret ile bize yardımcı olur. "
"Eğer şeyler kaç gün işe o zaman göz önünde ve kaç saniye şeyler geçmişte olan miyim?"
[Derin nefes] Bu herhangi bir ülke kendi saat dilimini değiştiğinde size söyler bir dosya var, gayet iyi.
O oldukça sık olur çıkıyor.
Ama bu kadar sürece güncellenen bu dosyayı tutmak gibi planlanandan ilan ediyoruz
ve kod yanı sıra programınızın mantık içine, o iyi olacak.
Sonra geriye bakmak ve fark olduğunu İkinci Dünya Savaşı sırasında,
İngiltere çifte İngiliz Yaz Saati vardı.
Bu BST üzerine tamamen gitti ve sonra sadece fazladan bir saat ekledi.
Yani rağmen ... Greenwich sahip iki saat ileri Greenwich oldu.
Yani bununla başa iyi.
Eğer bunu sen ya da ben sanki konuşmaya başladım fark ettiniz mi?
Bunu daha önce ettik çünkü gerçekten, gerçekten sinir bozucu.
Ve sen listesine abone emin olun
Görünüşe göre, birçok kez olur ki - ülkelerin zaman dilimlerini değiştirmek için gidiyoruz ne zaman!
Gibi bazen, bir yıl içinde birkaç kez hükümetler üzerinde değişiklik çünkü.
Ve sonra bu efsanevi programcı Libya'dan bir çağrı alır;
kim 2013 yılında, gün önceden sadece bir çift ile, geri saatleri koymak için gittiğini değil karar verdi.
Herkes zamanında dışarı güncelleme almak için yeterli bildirimde bulunarak mümkün değildi.
Her Libya bilgisayar, olursa olsun koştu hangi işletim sistemi Anlamı ...
... Bir saat oldu.
Bu Tamam, bu konuda haberi okuyun ve aceleyle yanı bu kod.
Ve sonra, o zaman Batı Şeria'dan bir çağrı olsun.
Nerede İsrail nüfusunun Filistin nüfusunun farklı bir saat diliminde olduğu.
biri nedeniyle İsrail'i takip ve bir değildir.
Şimdi farklı zaman dilimleri takip ediyor aynı yerde insanların iki nüfusa sahip.
Ve şimdi hepsi kim olduklarını bağlı olarak, bu zaman diliminde ya da bu bir onlar ister kendilerine sormak zorunda ve nerede oluştu
Ve programın içine bu kod yolu yoktur! Ve sonra...
Sonra tarihçi bir çağrı olsun.
Kim "Doğru, ben 18. yüzyılda geri bazı zamanlar hesaplamak için çalışıyorum." Diyor
"Ve biz Gregoryen takvimine Jülyen takvimine değişti."
"Biz yaklaşık üç hafta kayıp anlamına gelmiyor ...
... Biz bu tarihe bu tarihten itibaren sağ atlanır ve diğerleri cevapsız sadece. "
"Sadece tür benim için çalışır böylece bu kodu misin?"
bu tarihler ne zaman birisi zaten söyledim, çünkü O, gayet iyi
ve siz de programın mantığı içine kodlayabiliriz
ama şimdi gerçekten bakıyor, uzun ve gerçekten karmaşık
ve bir şekilde çalışır spagetti kod dolaşık karmaşa
ve sonra Rus tarihçi bir çağrı olsun!
Kim Evet, biz sadece 20. yüzyılda Gregoryen takvimi değişti "diyor ...
... Ve o sizin bulunduğunuz yere bağlı olarak değişiklik atlanır ettik tarihleri ​​çıkıyor ...
... Ve siz de o başa çıkabilirim? " Ve sonra İngiliz tarihçi bir çağrı olsun!
Kim, bence o kadar 16. yüzyıl olduğunu söylüyor ...
yıl 25 Mart'ta başladı!
Sadece orada aklını uçurmak için.
24 Mart itibaren, 924
ve daha sonra 25 Mart, 925. olurdu Ve ertesi gün.
Eğer 1 Ocak ile 31 Aralık 924, gitti Çünkü, 924 o sırayla gider çünkü!
Bu kitlesel SONRA karmaşık VE var ...
Sen astrofizikçi gelen çağrı olsun ...
Kim "Bu arada, biz sadece bir sıçrama ikinci oldu!" Diyor
Ve bu noktada, sadece bir tür "... ne ?!" go
Atılım saniye; Dünya sabit bir hızda dönmez çünkü.
Bu tektonik plakaların hareket gibi, hızlanır, yavaşlar
ve manyetik alanlar vardiya, ya da onun gibi bir şey. Ve böylece bazen
bir sıçrama ikinci ihtiyacınız olup olmadığını Uluslararası Astronomi Birliği çalışacaktır.
Bunu yaparsanız, saatler 23:59:58 gitmek
ve daha sonra 23:59:59 var:
Daha sonra yerine gidiş ve [00:00:00] herhangi bir mantıklı bir zaman diliminde gibi olur
bu 23:59:60 gidiyor!
aniden bir dakika içinde 61 saniye var çünkü ve her şey kırar!
Yani, ya da uygulamaya bağlı olarak ...
... Senin saat dünyanın geri kalanı ile senkronizasyon dışında bir saniye alır
ya da ikinci bir tekrar eder.
Bu başa etmek için yaratılmış yolu Unix zaman damgası denilen şey olduğunu.
Ve Numberphile, bence, daha önce bu konuda konuştu.
Eğer 1970 yılının ilk tam saniye başladı bu numarayı olması
ve saniyede, bir saniye artırır.
Sürekli. Işaretleyin. Işaretleyin. Işaretleyin.
ne yapmak gerekiyordu ne olursa olsun tarih size verilmiş almak çünkü Ve bu, harika
ve Unix Zaman Damgası olarak hesaplıyoruz,
ve veritabanı içine koydu.
Ve bu sadece artık saniye ile uğraşmak gerekir
HARİÇ öyle değil! Tabii ki değil!
Eğer eşgüdümlü evrensel saat Çünkü
hangi sıçrama saniye içerir!
Bu arada tekrar ve sadece 23:59:60 içerir
ve daha sonra astronomik zaman var! artık saniye içermeyen
ve sürekli dünyanın geri kalanı ile senkronizasyon dışında elde edilmiştir
biz etrafında yıldızlar ve tasarım teleskoplar bakmak gerekir çünkü!
[derin bir nefes]
Ve sen öğrendiklerini ...
Ne zaman dilimleri ile uğraştıktan sonra öğrenmek ne yapmak olduğunu ...
... Kodunuzu uzağa koymak olduğunu ...
... Denemek ve bununla başa çıkmak için hiçbir şey yazmayın.
Size daha önce var olmuştur insanlara bak.
Sen, önce insan, önce bu ele insanlar bakmak
spagetti kod inşa etmişlerdir insanlar,
ve onlara açık kaynak yapmak için çok teşekkür ederim
ve onlara kredi vermek, ve onlar yapmış olanı alırım ve size programa koymak,
ve bir daha bakmak asla.
Bu şekilde delilik yatıyor çünkü.
Google aslında kendilerini icat saniye sıçrama için gerçekten iyi bir yaklaşım vardır.
bunu açıklar kendi blogunda bu konuda bir makale, sanırım var.
Onlar denilen bir şey yapmak "sıçrama smear."
Bir dakika içinde 61 saniye olan Çünkü,
nedeniyle veya bir saat bir saniye geri kene sahip,
var masif kurumlar için gerçekten çok kötü olabilir
Gerçekten her şeyi tam olarak senkronize ve veri bir bit diğerinden önce depolanan inanmanız gerekiyor,
onlar aslında bütün gün boyunca ikinci dışarı smear.
Bir seferde bir mikro onların saat artırır.
kene kene, gün boyunca tüm yol işaretleyin.
öyle ki, gerçeklikten bazen belki de yarım saniye dışarı,
ama kendi sunucularında sürece her şey yarım saniye çıktı.
Kadar uzun bir şey başka önce gerçekleştiğini bildiği gibi, dünya ile senkronizasyon dışında olması yerleşik.
sürekliliği olan aslında doğru bir zaman sahip olmaktan daha önemlidir.