将utc时间和偏移量转换为DateTime

我有一个保存在数据库中的日期时间(以utc为单位),我也知道以下格式的utc偏移量。

-03:00:00 

如何将其转换为DateTime

将“偏移”应用于已有的DateTime最简单方法是创建一个保存偏移值的TimeSpan结构,然后简单地将偏移量“添加”到原始DateTime值。

例如:

 DateTime utcDateTime = DateTime.Parse("29 July 2010 14:13:45"); TimeSpan offSet = TimeSpan.Parse("-03:00:00"); DateTime newDateTime = utcDateTime + offSet; Console.WriteLine(newDateTime); 

这导致以下输出:

29/07/2010 11:13:45

这是原始时间(2010年7月29日14:13:45)减3小时(偏移–03:00:00)。

请注意,此技术仅使用您的DateTime值执行简单算术,并且不考虑任何时区。

您可能遇到的问题是,从数据库获取时,大多数数据库驱动程序将使用DateTimeKind.Unspecified创建DateTimeKind.Unspecified ,即使使用ToUniversalTime ,也可能无法正确转换为UTC。 为了得到这个,我使用这样的扩展方法:

  public static DateTime ToSafeUniversalTime(this DateTime date) { if(date != DateTime.MinValue && date != DateTime.MaxValue) { switch(date.Kind) { case DateTimeKind.Unspecified: date = new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second, DateTimeKind.Utc); break; case DateTimeKind.Local: date = date.ToUniversalTime(); break; } } return date; }