2011-07-13 51 views
9

我有一堆日期時間,我跟蹤我的應用程序。他們都在UTC時間。對於我的應用程序的一部分,我希望使用其中一個時間發送電子郵件,但編輯時應在特定時區。C#日期時間:不同時區的轉換

只有兩個主要領域,我會處理,東海岸和得克薩斯州(達拉斯和休斯頓)

我也可以做一個新的日期時間,當我發出這封郵件,以獲得東部時區( DateTime timestamp = DateTime.Now;

我的問題是這樣的:

如果用戶是在德州地區我如何轉換我的時間從東部到時間(1小時以內)?

我想是這樣的:

  //Convert timestamp to local time 
      TimeSpan ts = TimeZone.CurrentTimeZone.GetUtcOffset(timestamp); 
      timestamp.Add(ts); 

      timestampString = timestamp.ToString(); 

但沒有奏效。我也知道這條線是無效的:

timestamp.Hour = timestamp.Hour - 1; 
+1

您應該避免使用DateTime.Now,而是使用DateTime.UtcNow。 DateTime.Now可能會讓您驚訝,有時會出現錯誤的時區或夏令時錯誤。 –

回答

15

使用TimeZoneInfo類的本地時間轉換成時間在替代時區:

TimeZoneInfo est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
DateTime targetTime = TimeZoneInfo.ConvertTime(timeToConvert, est); 
0

您可以使用JavaScript:

var visitortime = new Date(); 
    vat time = visitortime.getTimezoneOffset()/60; 

之後,你可以將此值保存到任何隱藏的控制,是RUNAT =「服務器」。

4
var now = DateTime.Now; // Current date/time 
    var utcNow = now.ToUniversalTime(); // Converted utc time 
    var otherTimezone = TimeZoneInfo.FindSystemTimeZoneById("ANY OTHER VALID TIMEZONE"); // Get other timezone 
    var newTime = TimeZoneInfo.ConvertTimeFromUtc(utcNow, otherTimezone); // New Timezone 
3

這應該做的伎倆

DateTime localTime = TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZoneInfo.Local); 
+0

http://msdn.microsoft.com/en-us/library/bb382770(v=vs.110).aspx – Geykel

0

爲什麼不

TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, "AUS Eastern Standard Time");

並檢查獲取所有可用時區

foreach (TimeZoneInfo tz in TimeZoneInfo.GetSystemTimeZones()) 
{ 
    Console.WriteLine(tz.Id); 
} 
相關問題