C# 将utc时间和偏移量转换为日期时间

C# 将utc时间和偏移量转换为日期时间,c#,datetime,C#,Datetime,我在数据库中保存了一个日期时间(utc),我还知道以下格式的utc偏移量 -03:00:00 如何将其转换为日期时间将“偏移量”应用于已存在的日期时间的最简单方法是创建一个保存偏移量值的结构,然后简单地将偏移量“添加”到原始日期时间值 例如: DateTime utcDateTime = DateTime.Parse("29 July 2010 14:13:45"); TimeSpan offSet = TimeSpan.Parse("-03:00:00"); DateTime newDate

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

-03:00:00

如何将其转换为
日期时间

将“偏移量”应用于已存在的日期时间的最简单方法是创建一个保存偏移量值的结构,然后简单地将偏移量“添加”到原始
日期时间

例如:

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
值执行简单的算术运算,不考虑任何时区。

您可能遇到的问题是,大多数DB驱动程序在从数据库中提取数据时,将创建带有
DateTimeKind.Unspecified的
DateTime
,即使使用
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;
    }

12:12:12
在我看来既不像UTC偏移量,也不像
datetime
字段。你能详细说明每个部分的意思吗?这会有帮助的you@Oded它是utc偏移量。它的范围是-12:00:00到13:00:00请注意,当字符串中有“+”符号时,解析将失败。所以,使用“-”符号或根本不使用符号!夏令时呢?@AnilPurswani如果你知道特定的时区,那么你只能应用夏令时偏移量,而不仅仅是“小时偏移量”。TimeZoneInfo类具有一个属性(SupportsDaylightSavingTime),用于指示特定时区是否支持夏令时。不同时区可能具有相同的小时偏移量,但可能支持也可能不支持夏令时。