2011-07-13 10 views
9

私は自分のアプリケーションのために追跡している日付の束を持っています。それらはすべてUTC時間です。私のアプリの一部では、これらの時間帯の1つでメールを送信したいが、その特定の時間帯になるように編集した。C#Datetimes:異なるタイムゾーンの変換

私が対処する唯一の二つの主要な分野、私は(東部時間帯を取得するには、この電子メールを送信するとき、私はまた、新しい日時を作ることができ

東海岸とテキサス(ダラスとヒューストン)があります。ユーザーは、私はその時(1時間以内)に東部から私の時間に変換することができますどのようにテキサス州の領域内にある場合

DateTime timestamp = DateTime.Now;

私の質問はこれですか?

私はこのような何か試してみました:

  //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は、間違ったタイムゾーンまたは間違った夏時間のいずれかで、いつでもあなたを驚かせるかもしれません。 –

答えて

15

は、代替のタイムゾーンの時刻を現地時間に変換するためにTimeZoneInfoクラスを使用しますTimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, "AUS Eastern Standard Time");

とあなたがDateTime.Nowを避け、代わりにDateTime.UtcNowを使用する必要があり、利用可能なすべてのタイムゾーン

foreach (TimeZoneInfo tz in TimeZoneInfo.GetSystemTimeZones()) 
{ 
    Console.WriteLine(tz.Id); 
} 
1

TimeZoneInfo.ConvertTimeFromUtcを使用してください。そこにリストされている例はかなり自明です。あなたは=にrunat「サーバー」である任意の非表示の制御にこの値を保存することができます

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

その後:

0

あなたはjavascriptを使用することができます。

TimeZoneInfo est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
DateTime targetTime = TimeZoneInfo.ConvertTime(timeToConvert, est); 
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

理由だけではなく、

を実行する必要があります。

関連する問題