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

时间:2010-07-29 11:13:54

标签: c# datetime

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

-03:00:00

如何将其转换为DateTime

2 个答案:

答案 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;
    }