概述
寫下本文緣於前幾天博客園一位朋友發表了一篇NET面試題的文章其中一個關於DateTime的問題引起了大家激烈的爭論鑒於日期時間類型是大家開發中會頻繁使用的一個中數據類型這裡我們有必要來對NET Framework中的日期時間類型做一個深入的認識
從NET Framework 開始就提供了DateTime類型來表示一個日期時間類型它是一個結構類型並且不可以為空這在一定程度上給我們在往數據庫中保存數據時帶來了很大的麻煩因為我們知道在數據庫中datatime類型是可以為Null的為了解決這個問題不得不經常使用DateTimeMinValue來表示但這並不是我們想要的幸運的是到了NET Framework 中提供了可空類型此時我們就可以使用Nullable<DateTime>來表示一個日期時間類型它是可以為Null的這給我們帶來了極大的方便
到了NET Framework 中又為我們提供了一個全新的日期時間類型DateTimeOffset它通常以相對於格林威治時間(GMTGreenwich Mean Time)的日期和時間來表示格林威治時間又被稱為國際標准時間UTC(Universal Time Code)除此之外在NET Framework中還為我們提供了TimeZone類用來表示時區到了NET Framework 中對TimeZone類進一步增強提供了TimeZoneInfo類來表示世界上的任何時區
在本文中我們將對以上日期時間類型時區類進行詳細的介紹
DateTime和DateTimeOffset
DateTime 值類型表示值范圍在公元 年 月 日午夜:: 到公元 年月日晚上:: 之間的日期和時間DateTimeOffset包含一個DateTime 值以及一個名為Offset屬性該屬性用於確定當前 DateTimeOffset 實例的日期和時間與UTC之間的差值我們先來看一下這段代碼的輸出
static void Main(string[] args)
{
Console
WriteLine(DateTime
Now);
Console
WriteLine(DateTimeOffset
Now);
}
輸出結果為
可以看到DateTime輸出了日期和時間DateTimeOffset類型不僅輸出了日期和時間還給出當前時間與UTC之間的差值接下來我們再看一段代碼如何手工構造一個DateTime和DateTimeOffset實例
static void Main(string[] args)
{
DateTime dateA = new DateTime();
DateTimeOffset dateB = new DateTimeOffset(
new TimeSpan());
ConsoleWriteLine(dateA);
ConsoleWriteLine(dateB);
}
[] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/net/201311/14877.html