概述
写下本文缘于前几天博客园一位朋友发表了一篇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)
{
ConsoleWriteLine(DateTimeNow);
ConsoleWriteLine(DateTimeOffsetNow);
}
输出结果为
可以看到DateTime输出了日期和时间DateTimeOffset类型不仅输出了日期和时间还给出当前时间与UTC之间的差值接下来我们再看一段代码如何手工构造一个DateTime和DateTimeOffset实例
static void Main(string[] args)
{
DateTime dateA = new DateTime();
DateTimeOffset dateB = new DateTimeOffset(
new TimeSpan());
ConsoleWriteLine(dateA);
ConsoleWriteLine(dateB);
}
[] [] [] [] [] [] []