寫下本文緣于前幾天博客園一位朋友發表了一篇.NET面試題的文章,其中一個關于DateTime的問題引起了大家激烈的爭論,鑒于日期時間類型是大家開發中會頻繁使用的一個中數據類型,這里我們有必要來對.NET Framework中的日期時間類型做一個深入的認識。
從.NET Framework 1.0開始,就提供了DateTime類型來表示一個日期時間類型,它是一個結構類型,并且不可以為空,這在一定程度上給我們在往數據庫中保存數據時帶來了很大的麻煩,因為我們知道,在數據庫中datatime類型是可以為Null的,為了解決這個問題,不得不經常使用DateTime.MinValue來表示,但這并不是我們想要的。幸運的是到了.NET Framework 2.0中,提供了可空類型,此時我們就可以使用Nullable來表示一個日期時間類型,它是可以為Null的,這給我們帶來了極大的方便。
到了.NET Framework 3.5中,又為我們提供了一個全新的日期時間類型DateTimeOffset,它通常以相對于格林威治時間(GMT,Greenwich Mean Time)的日期和時間來表示,格林威治時間又被稱為國際標準時間UTC(Universal Time Code)。除此之外,在.NET Framework中還為我們提供了TimeZone類用來表示時區,到了.NET Framework 3.5中,對TimeZone類進一步增強,提供了TimeZoneInfo類來表示世界上的任何時區。
在本文中,我們將對以上日期時間類型、時區類進行詳細的介紹。
DateTime和DateTimeOffset
DateTime 值類型表示值范圍在公元0001 年1 月1 日午夜12:00:00 到公元9999 年12月31日晚上11:59:59 之間的日期和時間;DateTimeOffset包含一個DateTime 值以及一個名為Offset屬性,該屬性用于確定當前 DateTimeOffset 實例的日期和時間與UTC之間的差值,我們先來看一下這段代碼的輸出:
static void Main(string[] args)
{
Console.WriteLine(DateTime.Now);
Console.WriteLine(DateTimeOffset.Now);
}
輸出結果為:
原文轉自:http://www.anti-gravitydesign.com