我正面臨一個問題,其中我的服務器需要格式爲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);
}
}
相關問題:http://stackoverflow.com/questions/2532729/daylight-saving-time -and-時區 - 最佳實踐 – Oded 2010-10-25 18:43:51