2010-07-29 64 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; 
    }