2010-10-25 121 views
2

我正面臨一個問題,其中我的服務器需要格式爲GMT格式的日期時間對象,而且我的UI應用程序始終根據本地文化創建和操作所有日期時間對象。我無法更改文化,因爲還有其他需要日期時間對象的功能根據當地的格式。我已經爲此寫了一個轉換器,不確定是否有任何現成的api允許我這樣做。還有一點關於timezoneinfo上的GetUtcOffset方法有點困惑,它是否給出了本地時間和gmt時間之間的差異?我試過了在msdn上可用的文檔對我來說有點脆弱。請問你能幫忙嗎?我該如何單元測試它,通過改變文化和驗證輸出?TimeZoneInfo | GetUtcOffset:更好的解決方案?

下面的類將日期時間對象轉換爲包含等效的GMT時間,並在從服務器接收時將其轉換回來。

注意:我的服務器和用戶界面都在CET時間運行,但這些日期時間對象是英國特定的,因此服務器需要格林威治標準時間。

public class GmtConverter : IDateConverter 
    { 
     private readonly TimeZoneInfo timeZoneInfo; 

     public GmtConverter() 
      : this(TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time")) 
     { 

     } 
     public GmtConverter(TimeZoneInfo timeZoneInfo) 
     { 
      this.timeZoneInfo = timeZoneInfo; 
     } 

     public DateTime Convert(DateTime localDate) 
     { 
      var utcOffset = timeZoneInfo.GetUtcOffset(localDate); 

      var unSpecified = localDate + utcOffset; 

      return DateTime.SpecifyKind(unSpecified, DateTimeKind.Unspecified); 
     } 

     public DateTime ConvertBack(object local) 
     { 
      var localDate = (DateTime) local; 

      var utcOffset = timeZoneInfo.GetUtcOffset(localDate); 

      var unSpecified = localDate - utcOffset; 

      return DateTime.SpecifyKind(unSpecified, DateTimeKind.Unspecified);    
     } 
    } 
+0

相關問題:http://stackoverflow.com/questions/2532729/daylight-saving-time -and-時區 - 最佳實踐 – Oded 2010-10-25 18:43:51

回答

0

當你說格林威治標準時,你是指UTC?從Wikipedia

在隨便用,當 第二的分數並不重要,格林威治 標準時間(GMT)可以被認爲 相當於UTC或UT1。說「GMT」 通常意味着在非正式或休閒 上下文中使用 時要麼UTC或UT1。在技​​術背景下,避免使用「GMT」的使用 ;明確的術語「UTC」或「UT1」最好是 。

如果是這樣,問題就解決了:

相關問題