Tarihler ve saatler işleyen uygulamalar yazmanızı geliştiriciler, tarih düzenleme ve zaman işleme gerçekleştiren bir veya daha fazla teknolojileri kullanabilir. Özellikle, bazı temel işletim sistemini Apı, C çalýþma zamaný (CRT) ve Microsoft .NET Framework dönüştürme veya tersi durumda, tarihleri ve saatleri değiştirmek. Bu makalede, bazı tarihler ve saatler işleme katılan genel kavramları açıklanır. Buna ek olarak, bu makalede, belirli bir ürün ve teknolojileri gün ışığından yararlanma saati (DST) 2007 değişiklikleri etkisini açıklar.
Zaman depolama ve düzenleme
Zaman damgaları, bir tarih ve saat birleşimi belirtmek değerlerdir. Genellikle zaman damgalarını işlemesi uygulamalar, bu zaman damgaları Evrensel Ortak Saat'e (UTC) depolar. UTC avantajlarından UTC Evrensel olmasıdır. UTC bağlı değil, yerel saat dilimi için veya DST kullanmaktır. Ancak, UTC, kullanımı kolay ve kullanıcıların çoğu için uygun değildir. UTC belirgin bir seçim depolama için olsa da, görüntülemek için iyi bir seçenek değil. Bu nedenle, zaman damgası, kullanıcıya görüntülemeden önce uygulamaların çoğu UTC saati yerel saate dönüştürün. Bir Windows NT Dosya Sistemi'ne (NTFS) dizini içinde dosyaları ilgili tarihler ve saatler, görüntülemeden önce Windows Gezgini saat dilimini ve DST ayarı için UTC zaman damgası uygulanır.
Yerel saat UTC zamanını dönüştürme, iki kenardan uygulama olarak, düşünülebilir. Ilk saat dilimi uzaklığı ve ikinci DST mahsup hesabı. Bu nedenle, yerel saat UTC saati ve bir saat dilimi uzaklığı etkin olduğundan ve geçerli bir DST mahsup. Saat dilimi uzaklığı oldukça basittir. Bilgisayar, belirli bir saat dilimi için yapılandırılır ve bu saat dilimi UTC uzaklığı vardır. DST bir mahsup hesabı olup olmadığını uygulanması daha karmaşık belirlemektir. Bu faaliyetin, karmaşık ve dinamik birçok kurallarında dayanır.
Bu karmaşık DST kurallar, yakın zamanda DST) 2007 ile değiştirdiniz. 2007'De başlayarak, ABD'de yeni başlangıç tarihleri ve yeni bitiş tarihlerini için DST başlamıştır. Buna ek olarak, diğer ülkelerin ve düzenli olarak başlangıç tarihleri ve bitiş tarihlerini DST için kendi denetimi altında olan saat dilimlerinde değiştirmek için hükümetlerin yaygındır. Aşağıdaki bölüm, geliştirici ilgili ürünler üzerinde DST 2007 değişikliğin etkilerini açıklar.
DST 2007 hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:
DST 2007 Teknolojileri Geliştirici ile ilgili etkileri
Windows
Windows Update ve Microsoft Update sitesinde kullanılabilir güncelleştirmelerin, doğru DST 2007 ve aşağıdaki yıllar için değişiklikleri uygulamak, Windows etkinleştirme. Bu güncelleştirmeler uygulandıktan sonra bilgisayarı DST geçerken Windows doğru yerel saate "UTC zamanından itibaren geçerli farklarını hesaplar. Uzaklıklar uzaklıklar temel Apı'leri ve saat ile ilgili ağ Apı) içerir.
Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
942763
Microsoft Windows işletim sistemleri için Aralık 2007 toplu saat dilimi güncelleştirmesi
c çalýþma zamaný (CRT)
CRT, tarih çevirileri ve zaman çeviriler de gerçekleştirir. Bu nedenle, the CRT aynı zamanda DST 2007 için yeni kurallar eklemek için güncelleştirilmesi gerekir. CRT kendi zaman TZ
ortam değişkeni ayarlandığında bir temel işletim sistemi API zaman çağrısı başarısız olduğunda işleme veya gerçekleştirir. Güncelleştirmelerin her sürümü Microsoft Visual Studio ile birlikte gelen kaplarlar ve ayrıca, Windows'un içerdiği kaplarlar için kullanılabilir. Bu güncelleştirmelerin, CRT, Birleşik Devletler saat dilimlerinin DST dönüşümler doğru işlemeye devam etmek.
.NET Framework
.NET Framework, temel işletim sistemi çağrılarda dayanır. Bu nedenle, .NET Framework davranışını temel işletim sistemi durumunu yansıtır. Ayrı bir güncelleştirme gerekmemektedir.
Visual Studio .NET geliştirme ortamları (ıde'ler) tümleşik...
Visual Studio .NET ıde'ler sürüm 2002, 2003 ve Microsoft Visual C++, Microsoft Visual C# ve Microsoft Visual Basic 2005 içerir. Bu ürünler, yalnızca CRT dahil olduğundan etkilenir. IDE özel bir güncelleştirme gerekmemektedir.
Visual Studio 2005 Team Foundation Server
Visual Studio 2005 Team Foundation Server tarih ve saat dönüşümleri temel işletim sistemini esas alır. Bu nedenle, Visual Studio 2005 Team Foundation Server işletim sistemi olarak aynı davranışı sergiler. Visual Studio 2005 Team Foundation Server, Microsoft SQL Server, SQL Server Reporting Services ve Windows SharePoint Services da dayanır. Ilgili güncelleştirmeler işletim sistemi için SQL Server ve Windows SharePoint Services ile bilgisayarların güncelleştirilmesi gerekir. Ilgili güncelleştirmelerin tümünü aynı anda tüm etkilenen bilgisayarlarda uygulanması gerekir. Ayrı bir Visual Studio 2005 Team Foundation Server güncelleştirme gerekmemektedir.
Visual Studio 2005 Team sistem
CRT işletim sistemi, Visual Studio 2005 Team Foundation Server üzerinden ve Visual Studio 2005 Team sistem etkilenecektir. Ayrı bir Visual Studio 2005 Team sistem güncelleştirme gerekmemektedir.
Visual SourceSafe
2007'Deki Visual SourceSafe DST sorunları hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
931804
Visual SourceSafe 2007 gün ışığından yararlanma saati sorunları
Visual Basic 6.0 çalışma zamanı
Visual Basic 6.0 çalışma zamanı bu açıktan etkilenmez.
Visual C++ 6.0
Visual C++ 6.0 artık desteklenmiyor.
Daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:
Windows Vista için Windows Yazılım Geliştirme Seti (SDK)
Bu SDK, DST 2007 değişikliklerden etkilenen CRT bir sürümünü içerir. Bu SDK'ın yüklemesinin bir parçası, Visual Studio 2005 CRT yüklü CRT sürümünün yüklü olmadığı bilgisayarlara yükleyebilirsiniz. SDK yükleme CRT daha yeni bir sürümü zaten yüklüyse, bu yeni sürüm üzerine yazmaz. SDK'YI kaldırıldığında, CRT en son sürümü bilgisayarda kalır. Visual Studio 2005 CRT güncelleştirme, SDK'nı yüklemeden önce veya sonra ya da yükleyebilir.
Windows SDK için Windows Vista, CRT özel C++ uygulamaların bir parçası olarak dağıtılması için Visual Studio 2005 CRT için birleştirme modülleri (.msm dosyaları) kümesi de yükler. Bir uygulama uygulamanın yükleme klasörü için yeniden dağıtılabilen CRT dağıtır, CRT .msm dosyalarından Windows SDK için Windows Vista'nın yerine Visual Studio 2005 CRT güncelleştirmedeki güncelleştirilmiş olan CRT dağıtmanız gerekir. Uygulamayı yeniden dağıtılabilir Visual Studio 2005 CRT güncelleştirmesini Windows yükleme klasörü için dağıtır, bilgisayarlara yeniden dağıtılabilir Visual Studio 2005 CRT güncelleştirmeyi uygulamalısınız.
Platform SDK için Microsoft Windows Server 2003 R2
Bu SDK, DST 2007 değişikliklerden etkilenen CRT bir sürümünü içerir. Müşteriler bu SDK için sürüm notları izleyin ve gerektiğinde, Visual Studio 2005 CRT güncelleştirmeleri'ni kullanın.
.NET Framework 2.0 SDK
Bu SDK, DST 2007 değişikliklerden etkilenen CRT bir sürümünü içerir. Bu SDK'ın yüklemesinin bir parçası, Visual Studio 2005 CRT yüklü CRT sürümünün yüklü olmadığı bilgisayarlara yükleyebilirsiniz. SDK yükleme CRT daha yeni bir sürümü zaten yüklüyse, bu yeni sürüm üzerine yazmaz. SDK'YI kaldırıldığında, CRT en son sürümü bilgisayarda kalır. Visual Studio 2005 CRT güncelleştirme, SDK'nı yüklemeden önce veya sonra ya da yükleyebilir.
Windows, yerel saat dönüşümü
Kullanıcıya zaman bilgilerini ve tarih bilgileri görüntülemek için önce uygulamalar genellikle yerel saatler için UTC saat dönüştürün. Windows, zaman damgası düzenleme için kullanmak üzere uygulamaları için birkaç Apı sunar.
Not
- GetSystemTime() işlevi ve GetSystemTimeAsFileTime() işlevi, SYSTEMTIME yapısındaki veya FILETIME yapısındaki geçerli UTC zamanını edinin.
- GetLocalTime() işlevi, SYSTEMTIME yapısındaki geçerli yerel zaman alır.
- GetTimeZoneInformation() işlevi, geçerli saat dilimini ve bilgisayar DST ayarını açıklayan bir TIME_ZONE_INFORMATION yapısı alır.
- SystemTimeToFileTime() işlevi ve FileTimeToSystemTime() işlevi, SYSTEMTIME yapısı FILETIME yapıları arasında çağrılamadı.
- FileTimeToLocalFileTime() işlevi LocalFileTimeToFileTime() işlevi dönüştürmek ve bilgisayarda geçerli saat dilimini ve DST ayarlarını kullanarak, UTC ve yerel saat arasındaki bir FILETIME yapısı çevrilemiyor.
- SystemTimeToTzSpecificLocalTime() işlevi ve TzSpecificTimeToSystemTime() işlevi, SYSTEMTIME yapısındaki UTC zaman damgası için yerel bir SYSTEMTIME yapısı dönüştürün. Bu işlevler için DST başlangıç tarihi ve bitiş tarihini belirleyen bir TIME_ZONE_INFORMATION yapısı kullanın. Bu tür bir yapı sağlandığında, varsayılan olarak, geçerli bir DST kuralları kullanılır.
- NetRemoteTOD() işlevi, sunucu çubuğundaki bilgileri ve ayarları'nı kullanarak, uzak bir sunucudan zaman alır.
UTC zamanını ve yerel saat arasındaki dönüştürme FileTimeToLocalFileTime()
işlevi ve LocalFileTimeToFileTime()
işlevi yalnızca geçerli saat dilimini ve DST bilgileri kullanarak gerçekleştirin. Bu dönüştürme, dönüştürülen zaman damgası bağımsız olarak gerçekleşir.
Bu davranış, Windows Gezgini'nde görmek için <a0></a0>, DST kullanan bir saat diliminde bulunan bir bilgisayarda aşağıdaki adımları izleyin.
Sistem saatini değiştirme adımları gerektiğini unutmayın. Bu nedenle, bu adımları izlemeden önce bu zaman değişiklikleri yanıt, Takvim uygulamalar gibi tüm uygulamaları çıkmalısınız.
- Tarih bilgisayardaki bir DST gününe değiştirin. Örneğin, tarihi 1 Temmuz 2006 için ayarlayın.
- Aynı bilgisayarda bir NTFS dizini içinde Test.txt adlı yeni bir metin dosyası oluşturun.
- Dosyadaki zaman damgası gibi Windows Gezgini'nde görüntülenen dikkat edin:
1/7/2006 15: 37
- Tarih bilgisayardaki bir olmayan DST gününe değiştirin. Örneğin, tarihi 1 Şubat 2007 için ayarlayın.
- Windows Gezgini penceresini yenileyin.
- Dosyadaki zaman damgası gibi Windows Gezgini'nde görüntülenen dikkat edin:
1/7/2006 14: 37
Bu önceki örnekte, dosya UTC zaman damgasını değiştirin. Ancak, zaman damgası, bir yerel saate dönüştürmek için kullanılan kuralların bilgisayarda geçerli tarihi bağlı olarak değişir. 1 Temmuz DST aralığı içinde kaldığından, adım 3'te DST bir mahsup hesabı uygulandığı. Şubat 1 DST aralıkta kalan değil çünkü adım 6'da, DST uzaklık, uygulandığı. Bu davranış, böylece dosyanın zaman damgası deterministically yerel saate ve yerel saat dönüştürülebilir oluşur.
Daha fazla bilgi için bu blog bakın: SystemTimeToTzSpecificLocalTime()
yöntemi ve TzSpecificTimeToSystemTime()
yöntemi UTC zamanını ve yerel saat sağlanan TIME_ZONE_INFORMATION yapısı'nı kullanarak dönüştürün. Yok bir saat dilimi bilgilerini verdiyse, geçerli saat dilimi kuralları bu işlevleri kullanma ve DST kuralları DST bir mahsup hesabı olup olmadığını belirlemek için etki alanı için zaman damgası uygulanmalıdır. Bu işlem geçerli TIME_ZONE_INFORMATION yapı elde etmek için GetTimeZoneInformation()
yöntemini çağırmak için işlevsel eşdeğerdir.
TIME_ZONE_INFORMATION yapısı, DST için başlangıç tarihi ve bitiş tarihini içerir. Bu nedenle, geçerli saat dilimi bilgilerini TIME_ZONE_INFORMATION yapısını kullanır, bu TIME_ZONE_INFORMATION yapısını geçmişteki bir bilgi zayıflığına neden olabilir. Bu davranış, geçerli saat dilimi bilgilerini ve DST bilgileri dönüştürülen zaman damgası yansıtması oluşabilir. Bu davranış, DST başlatır ve durdurur tarihlerini yöneten kurallar yalnızca değiştirdiğiniz için DST 2007 tarafından etkilenir.
Bir uygulama geçmişte doğru dönüştürmeleri bu işlevler'i edinmek için <a0></a0>, uygulama bu işlevlerini çağırdığında bir tarihsel olarak doğru TIME_ZONE_INFORMATION yapısı sağlamanız gerekir.
Windows dinamik saat dilimleri
Windows Vista Dinamik DST saat dilimlerini tanıtır. Dinamik DST, saat dilimleri için DST, sınırları yıl yıl arasında değiştirmek için destek sağlar. Bu kurallar, kayıt defterinde depolanır. Uygulamaları GetDynamicTimeZoneInformation()
işlevini kullanarak, kuralları sorgulayabilirsiniz.
Dinamik bir saat dilimi, bilgisayarların, özellikle yıllık DST sınırları önceden bilinir yerel ayarlar için daha kolay güncelleştirme etkinleştirin. Vista için <a1>Windows</a1> SDK'da DYNAMIC_TIME_ZONE_INFORMATION yapısı hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
Yerel saat dönüştürme C çalýþma zamaný (CRT)
CRT temel olarak zaman damgalarını çevirebilir üç modu vardır:
- TZ ortam değişkeni ayarlanır, CRT Windows Apı'lerini çağırır ve bu makalede anlatıldığı gibi Windows davranışı sergiler.
- TZ ortam değişkeni ayarlanır, CRT bu ayarı temel alan kendi dönüşüm yapar. Böylece, bu senaryoya göre dönüştürmeleri gerçekleştirdiğinde, yeni DST 2007 kurallarına uyar CRT güncelleştiriliyor.
- TZ ortam değişkeni ayarlanmamış, ancak temel Windows Apı başarısız, CRT TZ ortam değişkeni için PST8PDT değeri'ni kullanarak kendi dönüştürmeleri için geri döner.
CRT UTC yerel saate dönüştürmek için kendi mantığı içerir. Uygulamalar, UTC zaman damgalarını time()
işlevi gibi işlevler edinebilirsiniz. Bu UTC zaman damgalarını time_t
değerler olarak depolanır. Yerel saat dönüştürme localtime_s()
işlevi gibi bir işlev ile gerçekleştirilebilir. Localtime_s()
işlevi Time.h üstbilgi dosyasında tanımlı bir tm yapısı doldurur. TZ ortam değişkeninde tanımlanan saat dilimini ve zaman damgası sırada etkin olan DST kuralları, tm yapısını temel alır. Not
Bu dönüşüm, Amerika Birleşik Devletleri için belirli kurallar izler.
CRT doğru olarak DST 2007 güncelleştirmeyi uygulamadan önce geçerli zaman damgalarını Birleşik Devletler saat diliminde işler. DST 2007 güncelleştirmesi yükledikten sonra CRT geçmişteki ve gelecekteki ABD tarih hem de yönetir. CRT güncelleştirmelerinde “ References ” bölümünde listelenir.
.NET Framework'de yerel saat dönüşümü
.NET Framework, depolamak ve zaman damgaları dönüştürme sınıflarını içerir. Bu sınıflar, DateTime
sınıfı, TimeZone
sınıfı, bir TimeSpan
sınıfının ve DateTimeKind
sınıfı içerir. Bu sınıflar olarak daha önce belirtilen, öncelikle temel platformunda uygulama üzerinde bağlıdır. Bu sınıflar Apı temel işletim sistemi olarak aynı davranışlar.
Istenen bir tutara göre zaman damgası mahsup işlevleri için bir zaman sınıfları ve .NET Framework tarih sınıfları tarafından ilginç davranış yaşandığı ilişkilendirir. Örneğin, AddHours()
işlevi AddMinutes()
işlevi ve DateTime
sınıfı AddSeconds()
işlevinde göz önünde bulundurun. Bu işlevleri, benzer biçimde adlandırılmış işlevleri, yalnızca zaman damgası tarafından istenen tutar DST ayarlarını bakmadan yanı sıra. Bu davranış, basit aritmetik temel UTC zaman damgası üzerinde düşünülmesi. Ancak, ek zaman damgası içine veya dışına, DST geçmesine neden olduğunda bu davranış için beklenmeyen sonuçlar neden olabilir. Bu değişiklikler DST 2007 ilgisiz davranıştır.
Öneriler
Aşağıdaki öneriler, DST 2007 etkisini en aza indirmek ve genel tarih ve saat işleme geliştiricileri yardımcı olabilir.
- Atomik bir DST 2007 güncelleştirmelerin yüklenebilmesi için planlamanız gerekir. Tüm planlı DST 2007 güncelleştirmeleri kapatma süresi bir başkasına olabildiğince uygulanmalıdır. Güncelleştirilmiş bir bilgisayar olan güncelleştirilmemiş bir bilgisayarla iletişim kurmak için SQL sorguları veya Web Hizmetleri gibi yöntemler kullanılacak çalışırsa, dönüştürme hataları oluşabilir. Benzer şekilde, tek bir bilgisayar gibi Windows update ve CRT güncelleştirme, iki veya daha fazla güncelleştirmeleri gerektiriyorsa, güncelleştirmelerin aynı anda uygulanmalıdır.
- UTC zaman damgalarını geçmişte doğru. Genelde, çoğu uygulama ile ilgili yerel saati dönüştürme bulunur. Uygulamaları, her zaman UTC zaman damgalarını depolamanız gerekir. Görüntüleme amaçları için yerel saat dönüşümleri DST bilgileri ve saat dilimi bilgileri gerektirir. Bu bilgi, birden çok kaynaktan gelebilir:
- Uygulama, geçerli saat dilimini ve DST ayarlarını dönüşüm için kullanabilir. Geçerli saat dilimini ve DST ayarlarını değil zaman damgası anda etkili olan, bu bir bilgi dönüştürme zayıflığına neden olabilir.
- Uygulama, DST ek olarak bilgisi bulunan UTC zaman damgası ve daha önce doğru saat dilimi bilgilerini depolayabilir.
- Dinamik bir saat dilimi varsa, uygulama dinamik saat dilimlerini hangi saat dilimi bilgilerini, belirli bir UTC zaman damgası uygulanacağını belirlemek için kullanabilirsiniz. Bu seçenek, yalnızca dinamik bir saat dilimi bilgilerini ve belirli bir saat dilimi için belirli bir zaman damgası kullanılabilir olduğunda kullanılabilir.
- Uygulama, yerel bir zaman damgası ve zaman damgası UTC depolayabilir. Bu yöntem, gelecekteki dönüştürme gerekli engeller.
- Zaman damgası ile ilgili bilgisayarlar arasındaki tüm iletişimi UTC zaman damgalarını kullanmanız gerekir. Bu, örtülü olarak her iki bilgisayar aynı UTC bağlam bilgilerini sağlar.
- Uygulama tarihleri işler, sınamada tarihlerini işlenme biçimi dikkatli olmalıdır. Zaman bilgileri olmadan görüntülenen tarihleri, genellikle, 12: 00'de ilgili tarihte bir zaman damgası olarak depolanır. Bu nedenle saat 11: 00 PM için önceki güne kaydırılacağı uzaklık, zaman damgası <a1>saat</a1> bölümünde devre dışı-tarafından bir hata geçerlilik tarihi bir kapatma-tarafından bir sonucu sonuçlanabilir.