8

一日の始まり、たとえば午前 6 時にユーザーに対して何かをする必要がある Web アプリケーションをロールアウトすることについて、私はちょうど適切に考え始めたところです。また、彼らの日の終わりに。

.ToUniversalTime を使用して時刻を UTC に保存するためだけに多くの人が言っていることをどこでも読んでいますが、これを試してみると (私が疑ったように) うまくいかず、時間が約 1 時間ずれました (私は英国にいるので、これは GMT から UTC へのオフセットに関係していると思いましたが、現時点ではサマータイムをオフにする必要があるため、意味がありません)。

ユーザーのタイムゾーンを格納するフィールドが db にあるため、 ConvertTimeToUtc と fromUtc の使用を開始すると、期待どおりの動作を開始しました。繰り返しになりますが、夏時間の変換を行うために自分でロジックを組み込む必要があるのか​​ 、それともそうすべきなのかはわかりません。

なぜ誰もが .ToUniversalTime について話していたのか、それは本当に役に立たなかったようで、UTC にシフトする時間をオフセットする方法を理解できなかったので、主に疑問に思っています。理にかなっている。

誰かが各方法がどのように役立つかを説明できますか?

4

3 に答える 3

3

編集:私は間違っていました。との実装の微妙な違いの説明については、Matt Johnson の回答を参照してください。DateTime.ToUniversalTimeTimeZoneInfo.ConvertTimeToUtc

タイトルに特定の質問が書かれている他の人のために: DateTime.ToUniversalTime と TimeZoneInfo.ConvertTimeToUtc の違いは何ですか?

答えは、違いはありません

JustDecompile を使用しDateTime.ToUniversalTimeて .NET 4.5 の実装を調べると、次のものがTimeZoneInfo.ConvertTimeToUtc直接使用されていることがわかります。

    public DateTime ToUniversalTime()
    {
        return TimeZoneInfo.ConvertTimeToUtc(this, TimeZoneInfoOptions.NoThrowOnInvalidTime);
    }
于 2014-09-12T05:05:35.967 に答える
3

別のタイムゾーンのマシンでコードを実行しても、計算は機能しますか? これが、人々がすべての DateTimes を UTC として保存して扱う理由です。あいまいさを取り除きます。ユーザーのタイムゾーンを保存する必要はありません。場所を問わず、どのマシンでもデータベースから日付を取得し、現地時間との間で簡単に変換できます。

他のタイムゾーンで時間を保存している場合は、それを取り出して、夏時間と国際日付変更線の考慮事項を考慮して、目的のタイムゾーンへのオフセットを計算する必要があります。あなたの場合、余分な不要な情報も保存しています。

于 2009-11-10T00:24:39.057 に答える