13

C# は、タイムゾーンを変換するときに夏時間を考慮しますか?

ロンドンの現在時刻のソース日付があり、タイムゾーン (CET) に変換したいと考えています。これが私が使用しているコードです。

DateTime time = DateTime.ParseExact(timeString, "HH:mm", null);
time = DateTime.SpecifyKind(time, DateTimeKind.Unspecified);

//Convert it to the right timezone. It is currently in GMT

TimeZoneInfo gmt = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
TimeZoneInfo current = TimeZoneInfo.Local;

DateTime utc = TimeZoneInfo.ConvertTimeToUtc(time, gmt);
DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, core.startTime = local;

現在、うまく機能しています。しかし、DST がその醜い頭をもたげたとき、それは機能し続けますか、それとも恐ろしく壊れますか? 過去にたくさんの問題があったため、TimeZones には少し警戒しています。

4

4 に答える 4

3

簡単な答えは「どこにでもあるわけではなく、完全ではない」です。


TimeZoneInfo.GetAdjustmentRulesは、DSTオフセットの変更と、それらがいつ有効になるか、いつ無効になるかに関するルールのコレクションを提供します。

ただし、ユーザーは、Windowsのコントロールパネルの日付と時刻で[夏時間の自動調整]のチェックを外すことで、問題を解決できます。WindowsでDSTがオフになっている場合は、調整ルールの空のコレクションが表示されます。

調整ルールを自動的に適用する場合は、DateTimeKindが設定されているDateTimeオブジェクトを使用する必要があります。DSTがオフになっている場合、これは変換で尊重されます。

GMTは、グリニッジ天文台の太陽時です。英国は、世界規模で何かを調整した最初の企業であったため、日付変更線からのタイムゾーンオフセットのビジネス全体を発明しました。昔のハルシオンの時代には、彼らは惑星全体にヨットの海軍を持っていて、ラジオはありませんでした。注文の遅れは数週間または数か月だったので、一貫性のある正確なグローバルな時間管理は、惑星よりも大きな基準枠を持つ唯一の人々、つまり王室天文官によって発明されました。

月の潮汐力が地球の自転を遅らせています。水の海を上下に動かすにはたくさんのジュースが必要ですが、それは魔法ではなく、惑星のスピンの瞬間から来ています。

また、太陽軌道の持続時間も一定ではないため、時々うるう秒があり、カレンダーを惑星の現実と同期させます。一方、恒星時にはそのような愚かさはないので、私たちはそれから離れます。次に、相対論的ドリフトがあります。GPS衛星は非常に速く移動するため、実際にはわずかなタイムワープを補正する必要があります。

于 2012-07-03T11:28:18.500 に答える
0

少なくとも .net 4.5 では TimeZoneInfo は夏時間を処理します。

これを確認する最も簡単な方法は、BaseUtcOffset と GetUtcOffset を比較することです。

   var baseOffset = timeZoneInfo.BaseUtcOffset;
   var currentOffset = timeZoneInfo.GetUtcOffset(currentLocalTime);
   var isDst = currentOffset > baseOffset;
   var delta = currentOffset - baseOffset;

これは、DST の DateTime を調整することのみに関心がある場合に不要な AdjustmentRule を処理するよりもはるかに簡単です。

ところで、GMT は廃止され、UTC に置き換えられました。

于 2015-07-10T05:47:41.467 に答える
0

.NET で 1987 年より前の日付を扱う場合は注意してください。関心のあるタイム ゾーンの TimeZoneInfo のデフォルトの AdjustmentRules は、目的には不十分な場合があります。詳細はこちら: http://blog.appliedis.com/2013/03/06/beware-daylight- Saving-time-transitions-in-dot-net /

于 2013-03-12T14:03:26.580 に答える
0

C# は、タイムゾーンを変換するときに夏時間を考慮しますか?

はい、Windows Update でタイムゾーン情報が更新されることがあるため、コンピューターが最新の状態に保たれていると仮定します。国が DST 期間を変更していない場合 (これは最近オーストラリアで発生しました)、Windows の更新がなくても機能するはずです。

ロンドンの現在時刻のソース日付があり、タイムゾーン (CET) に変換したい

「ロンドンの現在時刻であるソース日付」とはどういう意味ですか? 常に日付を UTC として保存し、「最後の分」に目的の現地時間に変換してください。

夏時間が変わるとどうなるか疑問に思っている場合は、コンピューターの時計を変更してこれをテストできます。

于 2012-07-03T12:22:09.487 に答える