我有一个保存在数据库中的日期时间(以utc表示),我也知道以下格式的utc偏移量。
-03:00:00
如何将其转换为DateTime
答案 0 :(得分:12)
将“偏移量”应用于已有的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
值执行简单算术,并且不考虑任何时区。
答案 1 :(得分:0)
您可能遇到的问题是,从数据库中提取数据时,大多数数据库驱动程序都会创建DateTime
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;
}