将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; }