SORU
10 Mart 2012, CUMARTESİ


Nasıl kodlama uygulamaları artık yıl böceklere karşı korumak için tasarlanmış geliştirebilir miyiz?

Microsoft sadece tarih hesaplama yazılımı bir hata (artık yıl) 9 ** geçen hafta duyurdu.

Gerçekten artık yıl hakkında hüküm basit bir hata DateTime.Now.AddYears(1) geçici?

Kodlama uygulamalarını buna engel ne olabilir?

EDİT Olarak dcstraw yıl aslında doğru tarih döndürmek için bir leap DateTime.Now.AddYears(1) işaret etti .NET. Çerçeve bir hata değil, ama belli ki Tarihi bir hata hesapları.

CEVAP
10 Mart 2012, CUMARTESİ


Utanmaz fiş:

Daha iyi bir tarih ve API zaman

Bu yerleşik .NET tarih ve zamanı kitaplıkları korkunç sert ve düzgün kullanmak. Onlaryapınsana ihtiyacın olan her şeyi yapalım, ama yapamazsınexpressaçıkça yazın sistem kendini. DateTime is a mess, DateTimeOffset Mayıs sükunet içine düşünüyorsun aslında koruyarak zaman dilimi bilgilerinin olmadığını zaman ve TimeZoneInfo değil güç için her şeyi düşünmek olmalısın düşünüyor.

Bunların hiçbiri sağlamak güzel bir şekilde söyleyerek, "sadece bir gün" ya da "sadece bir tarih", ne yaparlar net bir ayrım arasında "yerel zaman" ve "zaman belirli bir zaman dilimi". Ve eğer bir takvim Gregoryen dışında kullanmak istiyorsanız, Calendar sınıf arasında, tam zaman gitmek gerekir.

Tüm bu neden yapıyorum binası Noda Time - alternatif tarih ve saat kütüphane inşa edilmiş bir liman Joda Time "motor" ama bir yeni (ve daha küçük) API üstüne.

Bazı eğer bunların farkında değilseniz kaçırmayın kolay olan düşünmek isteyebilirsiniz puan:

  • Belirli bir saat diliminde bir saat/bir yerel tarih eşleme düşündüğün kadar basit değil. Zaman/belirli bir yerel tarih sonra, gün ışığından yararlanma geçişler nedeniyle (belirsizlik) ya da sıfır kere (atlandı) iki kez ortaya çıkabilir
  • Saat dilimleri TimeZoneInfo genellikle ortaya çıkarmak için istekli olduğunu daha tarihsel olarak - daha açıkçası değişir. (Kimin fikriydi "" kalıcı gün ışığı olduğu zaman, ya da üzerinde değişiklikler zaman tasarrufu.) Standart zamanın bir saat dilimi desteği yok
  • Hatta zoneinfo veritabanı ile, saat dilimi Kimlikleri mutlaka istikrarlı değil. (CLDR bu; bir şey Noda Süre sonunda destek için umuyorum adresleri.)
  • Tarihler ve saatler metinsel temsilleri bir kabus değil, sadece sıralama açısından, ama ayırıcıları, ayırıcılar zaman, ismin-in hali ve ay adları gibi garip şeyler tarih
  • Güne başlarken hep gecenin değildir - örneğin Brezilya, bahar günışığı tasarruf geçiş 1 11:59:59 dan duvar saati taşır
  • Bazı durumlarda (Evet, biliyorum) bölge bütün bir gün atlanması güç bir zaman - Aralık 2011 30 Samoa olmadı! En geliştiriciler muhtemelen bu bir ihmal olabilir şüpheleniyorum, ama...
  • Eğer bir takvim Gregoryen dışında kullanmak için gidiyoruz, dikkatli olun ve eğer gerçekten uslu durmasını beklemek nasıl biliyor emin olun.

Bildiğim kadarıyla özel geliştirme uygulamaları:

  • Gerçekten temsil etmeye çalıştığın şeyi düşün.Noda Zaman çekirdek parası geliştiriciler çeşitli farklı türleri arasında verileri temsil etmek için seçmeye zorlamak bekliyorum. Bu doğru, ve her şey daha kolaydır.
  • Birim aklınıza gelebilecek her şeyi test edin. Elbette sistem tam olarak bağlı olacak, amaözellikleelbette ışığından geçişleri arasında, ve artık yıl ne farklı zaman dilimleri, düşünün.
  • Bir "saat-gibi arayüzü" - şimdiki zaman - yerine açıkça DateTime.Now arama veya DateTime.UtcNow; kolaylaştırır (uygun!) anlatmak için bir servis enjekte tavsiye ederim birim test için
  • Eğer birden fazla operasyon ile"", o tarihten edinmek/saat . şimdi sahne iseniz ^em>bir kezve unutma, yerine sürekli "değer çağrıları arasında talihsiz bir şekilde değiştirebilir aksi." - şimdi talep
  • "Her şeyi UTC" değil her zaman cevap da - eğer bilmek istiyorum "tam olarak ne zaman geliyor 'iki hafta sonra' ortaya benim yerel saat dilimi?" sonra ihtiyacım var saklamak içinyerel/saat olarak saat dilimini tarih.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • EmperorTigerstar

    EmperorTiger

    14 EYLÜL 2009
  • eurotuner

    eurotuner

    6 Mart 2006
  • InfinityWard

    InfinityWard

    19 EYLÜL 2006