2011-08-03 18 views
5

DateTime.MinValue bir DateTimeOffset değerine dönüştürmek çalışıyorum ama bir ArgumentOutOfRange özel durum alıyorum.DateTime.MinValue DateTimeOffset için dönüştürme

the MSDN article on implicit conversions of DateTime to DateTimeOffset'a bakıyordum ve Özel Durum bölümü, bu ArgumentOutOfRange istisnasını ne zaman alacağımı belirtir;

... Eşgüdümlü Evrensel Zaman (UTC) tarih ve ofset tatbik kaynaklanan zaman önce MINVALUE daha olduğunu. ...

Neden aşağıdaki kod istisnayı atar?

DateTime test = DateTime.MinValue; 
DateTimeOffset dto = test; 

basitçe nedeniyle benim diliminin bunu midir? GMT +8'deyim, ancak yukarıdaki kodu anlamış olmak, Testin Belirtilmemiş bir türle oluşturulduğudur.

Yalnızca DateTime öğesinin MinValue'sini test ederek ve bu nedenle de DateTimeOffset.MinValue kullanarak sorunu çözüyorum.

Belirtilmemiş tür DateTime nesnesinin neden hata yaptığını merak ediyorum. Eğer GMT + 8 iseniz

cevap

5

ardından DateTime.MinValue bir yerel zaman zaman önce DateTime.MinValue daha dolayısıyla istisna UTC karşılık gelir. belgelerine itibaren başvurulan: DateTime.Kind özelliğinin değeri DateTimeKind.Local veya DateTimeKind.Unspecified, DateTimeOffset nesnenin tarih ve saat DateTime eşit ayarlanır ve onun Ofset özelliği ayarlanır

ise yerel sistemin geçerli saat diliminin ofsetine eşittir.

Yani mantıksal sen bir Offset 8 saat MinValue bir DateTime olurdu , ama bu UTC tarih/saat temsil edilebilir daha eski ofset tatbik kaynaklanan anlamına gelir.

(bir yerel saati almak için UTC ofset Eğer eklemek unutmayın, ya çıkarma UTC almak için yerel bir zaman onu. Noda Time biz Offset her biri için bir türlerini kullanarak bu zorlamak , LocalInstant ve Instant ve yalnızca uygun işlemi gerçekleştirmenize izin verin ...)

+0

Bunun için teşekkürler Jon. Belgelerin o kısmını özlediğime inanamıyorum. –

+1

Ve bu, bir süredir beni rahatsız eden windows telefon uygulamasında bir hatayı açıklıyor :) –