2010-07-29 60 views
5

我有一个日期时间(在utc)保存在数据库中,我也知道以下格式的utc偏移量。转换UTC时间和抵消日期时间

-03:00:00 

如何将此转化为DateTime

+1

'12:12:12'看起来不像我的UTC时间或'datetime'字段。你能详细说明每个部分的含义吗? – Oded 2010-07-29 11:17:30

+2

http://stackoverflow.com/questions/2548235/convert-utc-datetime-to-another-time-zone 这将帮助你 – 2010-07-29 11:18:57

+0

@Oded它是UTC偏移。它的范围是-12:00:00至13:00:00 – developer 2010-07-29 11:24:08

回答

10

申请“偏移”到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值执行简单算术,并且不考虑任何时区。

+2

请注意,当字符串中有'+'符号时,解析失败。因此,请使用' - '符号或根本没有符号! http://msdn.microsoft.com/en-us/library/se73z7b9%28v=vs.110%29.aspx – Jowen 2015-01-14 14:22:30

+0

有关夏令什么? – 2016-02-12 12:51:21

+0

@AnilPurswani你将只能如果你知道具体的时区,而不是仅仅一个“小时偏移”应用夏令时偏移。所述的TimeZoneInfo类有一个属性(SupportsDaylightSavingTime),以指示是否一个特定的时区支持夏令时。不同的时区可能具有相同的小时偏移量,但可能会或可能不支持夏令时。 – CraigTP 2016-02-12 12:56:55

0

你很可能会碰到的问题是,大多数DB驱动程序从数据库中获取的时候将创建DateTimeDateTimeKind.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; 
    }