2009-06-08 15 views
10

UTC時刻をEDTに変換する共通の機能が必要です。私はインドにサーバーを持っています。その中のアプリケーションは、すべての時間目的のためにEDT時間を使用する必要があります。タイムゾーン間の時間を変換する方法(UTCからEDT)?

私は.NET 3.5を使用しています。

これは他のフォーラムでも見つかりました。

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

私は "Easten Daylight Time"で試してみましたが、エラーが発生しました。

"タイムゾーンID 'Eastern Daylight Time'がローカルコンピュータに見つかりませんでした。"

この解決策または他の解決策でお手伝いしてください。

答えて

22

Eastern Daylight Timeは、フルタイムゾーンの名前ではなく、効果的に常にUTCの4時間後のタイムゾーンの半分です。

夏時間適用が適用されていない時間にEDTを使用する理由を教えてください。 UTCと常に同じオフセットを持つカスタムタイムゾーンが必要な場合は、TimeZoneInfo.CreateCustomTimeZoneを使用します。

東部標準時のタイムゾーン(TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"))を使用すると、夏時間に適切に夏時間が適用されます。例えば

私はあなたが夏時間の問題を避けるように、期間の計算にUTCを使用して、表示のみのためにLocalTimeを使用するべきであると言っているだろう
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 

// Prints True 
Console.WriteLine(tzi.IsDaylightSavingTime(new DateTime(2009, 6, 1))); 
// Prints False 
Console.WriteLine(tzi.IsDaylightSavingTime(new DateTime(2009, 1, 1))); 
+0

こんにちはジョン、お返事ありがとうございます。あなたはこれら2の中から最良の解決策として何を提案しますか?私はカスタムタイムゾーンを作成するか、TimeZoneInfo.FindSystemTimeZoneById( "東部標準時")を使用します。それが夏時間の世話をすることを考慮して。 getdate()メソッドを使用してIST時間を使用しているストアドプロシージャで、この問題をどのように処理しますか? – Shetty

+0

私はストアドプロシージャについてはわかりませんが、正直なところ、可能であれば、UTCを渡してUTCを理解できるようにしてください。東部標準時のカスタムタイムゾーンを使用するかどうかは、UTCより常に4時間遅いタイムゾーンか東部標準時に一致するタイムゾーンを使用するかによって異なります。あなたはもともと、EDTを「いつもの目的のために」使う必要があると言っていました。あなたが本当にEDTを必要としているのか、東部標準時が必要なのかを確認することをお勧めします。 –

+0

Ok Jon。私は*ボストン*都市時間をすべての時間目的のための標準時間として使用するように求められました。これはEDTに該当します。私は光の節約にはあまり気づいていませんでした。ISTサーバーで動作していても、私のアプリケーションはこの時間がかかります。以前はEDTのタイムゾーンで動作していた別のサーバーにありましたが、そのような問題はありませんでした。 – Shetty

1

DateTime.ToLocalTime(UTCとローカルタイムゾーンの間)、DateTime.ToUniversalTime(現地時間からUTCへの変換)。

編集コメント1

後、私は、サーバーのそれと異なるタイムゾーンを表示した後だということ、それを取るのですか?

ウェブページを使用してサーバーにアクセスしている場合は、 HttpRequest.UserLanguagesを使用してCultureInfoオブジェクトを作成し、これを使用してDateTimeオブジェクトを解析します。 詳細はこちらMicrosoft link on displaying local user time for web pages.

クライアント - サーバーアーキテクチャを使用している場合、LocalTime呼び出しがクライアント側にある場合、クライアントのLocalTimeが表示されます。それをUTCに変換してサーバーに送り返します。

いずれの方法でも、クライアントがどこにいるかを知る必要がないため、複数のタイムゾーンに複数のクライアントがある場合、すべての計算が一致します。また、さまざまなCultureオブジェクトを使用して、任意の時間帯に時間を表示することもできます。

編集2は、あなたがサーバーからUTC形式で時刻データを取得することができ、私の第二のコメント

をコピーしました。その後、DateTimeを使用して変換することができます。ToLocalTimeまたはDateTime.ToUniversalTimeが必要です。日付も含めて、米国のMM/dd/yyyyとヨーロッパのdd/MM/yyyyの書式に対処する必要がある場合は、CultureInfoクラスを使用してそれに応じてDateTime値を解析できます。今のところよりも多くの作業があるように思えますが、サーバーを再び動かすと、DateTime処理を再コードする必要はありません。それは十分に正確である場合を見て

新しいポイント

もう一つのポイントは、サーバとNTP(ネットワークタイムプロトコル)またはSNTP(簡易ネットワークタイムプロトコル)を使用しているクライアント間のクロック同期です。どのOSを使用しているのかわかりませんが、これはWindows Serverの時刻サービスがネットワークを同期するために使用します。

+0

こんにちはクリス、 お返事ありがとうございます。 もし私が間違っていないのであれば、サーバがISTタイムゾーンで動作していれば、Datetime.ToLoalTimeはUTCからIST.isntの時間を得ますか? – Shetty

+0

真。私は私の答えを編集しました。 LocalTimeがClient-serverコードをどのようにしているのか、Webユーザのローカル時間を表示する方法を説明するため。 – ChrisBD

+0

こんにちはクリス、あなたはそれが正しいです。私は、サーバーとは異なるタイムゾーンを表示しています。それはクライアントサーバーアーキテクチャです。しかし、私はクライアントシステムの時間に依存したくないので、すべてのクライアントマシンの時間はまったく同じではないかもしれません。サーバーのタイミングを使用する場合と同様に、すべてのクライアントで統一された状態になります。 – Shetty

0

カウボーイの方法は、UTC時間を取り、それから4時間分(タイムゾーンオフセット)を減算し、UTCフォーマット関数を使用してフォーマットし、その上に「EDT」ラベルを貼り付けます。

夏時間と標準時を別の時間に使用する必要がある場合は、切り替え日付のルックアップテーブルを作成するか、カレンダー機能を使用してください。