2011-02-11 18 views
7

Tüm DilimiLinux- Windows Zaman Dilimi Eşlemesi? Windows

GMT,

(GMT+10:00) Canberra, Melbourne, Sydney gibi böyle bir şekilde görüntülenen ve Ofset ve yeri vardır. Buna karşılık, Linux her zaman dilimini/usr/share/zoneinfo/[Continent]/[Place] dizin dizini olarak yapıyor.

Uygulamam için her Windows saat dilimini Linux saat dilimine eşlemeye ihtiyacım var.

(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi => Asia/Calcutta 

gibi Şimdi International Date Line West için sorun yüzeyi olan Rusya ve Amerika arasında yer alır. Windows, onun (GMT-12: 00) Uluslararası Tarih Hattı Batı ile işaretlenmiş ve çeşitli kaynaklardan Linux kendi Etc/GMT + 12 olduğunu buldum.

(GMT-12:00) International Date Line West => Etc/GMT+12 

da

(GMT+12:00) Coordinated Universal Time+12 => Etc/GMT-12 
(GMT-02:00) Coordinated Universal Time-02 => Etc/GMT+2 
(GMT-11:00) Coordinated Universal Time-11 => Etc/GMT+11 

Bu bana şaşkın ve benim app UTC w.r.t Damgasıyla ve ofset UTC ile yakından çalışır tutar. Yani bu haritalama beni ve uygulamayı karıştırıyor.

Neden herkes aynı yerde hem -12 ve +12 Ofset'in tersi olduğunu açıklayabilir mi? Peşin

Teşekkür :) Etc dizinde

cevap

20

Unicode.org, CLDR'nin bir parçası olarak bir eşlemeyi barındırır. You can get to the latest version here. Bu sayfadan bağlanan verilerin XML sürümleri de vardır.

XML verisinden here bir eşlemenin nasıl oluşturulacağına ilişkin örnek kod (Python'da) bulabilirsiniz.

Zorunlu Saat Dilimi Rant: kim Windows'ta zaman dilimi desteği uygulanan uyuşturucu kullandığını

Not söyledi. Seninle dalga geçmiyorum. Saat dilimlerinin isimlerine bakın. Orta Avrupa zamanı neden "Romantik standart Zaman" olarak bilinir. Romantik? Ne, Paris'i içerdiği için, ya da? Roma Standart Zamanı, aynı zamanda Roma'yı da içerir, ama Romantizm! Ayrıca, kayıt defterinde saat dilimlerinin kimliği altında düzenlenmez. Hayır, onlar ekran adı altında organize edildi! Bu yerelleştirilmiş olduğundan, her saat dilimi farklı çevirilerdeki farklı bir anahtarın altında yer alacağı anlamına gelir !!! Doğru zaman dilimini bulmak için, doğru kimliğe sahip olanı görmek için tüm zaman dilimini incelemeniz gerekir.

Bunun için örnek kodum var here. get_win_timezone() işlevine bakın.

POSIX'in saat dilimlerindeki işareti tersine çevirmesi gerektiğine karar veren, bunu tasarlayanla aynı kişi olup olmadığını merak ediyorum, böylece -8 saat ve 8 saat anlamına gelir. Her halükarda, birlikte yasadışı bir şey içtikleri eminim.

+0

Teşekkürler Lennart ve NullToken :) –

+1

25 Ocak 2013 itibariyle unicode.org adresindeki saat dilimi verilerinin en azindan olduğuna dikkat edin 7 yıl modası geçmiş. Şimdiye kadar, Asya/Kalküta (Asya/Kalküta'dan yeniden adlandırılmış), Amerika/Indiana/Indianapolis ve Amerika/Kentucky/Louisville eksik olduğunu fark ettim. Bu, Windows saat dilimlerini Linux'a eşleştirmek için hala sorun değil, ancak bu verileri düzeltilene kadar başka bir şey için kullanmam. – geofflee

+0

@geofflee: Bu talihsiz bir durum, zaman dilimi verilerinin bile olduğunu bilmiyordum ve neden güncel tutmazlarsa neden yaptıklarını anlamıyorum. Her neyse, sadece saat dilimi adı eşlemesi için kullanıyorum. –

2

tanımları POSIX tarzı olmak içindir, böylece onların işaret beklediğiniz tersine çevrilir var. Ben POSIX için uzman değilim, ama anladığım kadarıyla, temel fikir, yerel isimlerinin ve GMT'nin ofsetinin kombinasyonuyla timzonları ifade etmekti. Orta avrupa örneği (Orta Avrupa Saati/CET): Aslında Etc dizinde

Europe/Berlin (w/o daylight savings) equals GMT+01:00 equals CET-1 

GMT-1 bir saat öncesinde (gerçek) GMT taşımaktadır "GMT" adlı bir (fictous) Saat dilimini anlatır.

Bildiğim kadarıyla, bu dosyalar yalnızca onlara karşı (sembolik) bağlantılar oluşturmanıza izin vermek için oradadır, bu yüzden orta avrupa'da bir yere yerleştirildiyseniz, GMT-1'a bir bağlantı oluşturur ve CET-1 olarak adlandırırsınız.

Size verebileceğim en iyi öneri, Etc dizinini tamamen yok saymak ve pencereler eşzamanlı adlarından Unix zaman dilimi klasörlerine/dosyalarına bazı eşleme tablolarını kullanmaktır. Windows zaman dilimi bilgisi sadece GMT'ye ofset vermekle kalmaz, aynı zamanda Günışığı Tasarruflarını da bilir (ve başladığında veya bittiğinde). Aynı durum, saat dilimi veritabanındaki klasörler/dosyalar için de geçerlidir, ancak Etc dizinindeki dosyalar için geçerli değildir - GMT'ye basit bir statik uzaklık verir.

tz veritabanındaki saat dilimlerinin bir listesi in the wikipedia bulunabilir.

+0

:) Önerilerinize göre, gerçek sebebi buldum ve çözümü aldım :) Teşekkürler Patrick :) –

2

Tüm dosyaların işaretleri tersine döndürülürse, o zaman aradığınız dosyalar ileriye doğru haritalama ofsetleri olur; muhtemelen daha aşina olduğunuz şey ise ters eşleme ofsetleridir.

Windows genellikle makinenin dahili saati için yerel saat dilimini kullanır, bu nedenle UTC'ye dönüşebilen saat dilimi dosyalarına gereksinim duyar. Linux genellikle makinenin dahili saati olarak UTC'yi kullanır, bu yüzden yerel saate dönüşebilen saat dilimi dosyalarına ihtiyaç duyar.

İki makinenin ofsetleri, zamanın tersi ve tersini açıkladığından, zaman dilimi dosyalarının birbiriyle ters olarak ilişkili olmasının nedeni budur. Diğer bir deyişle, bir dizi bölge dosyasını birinden alırsanız, diğer set negatif olur.