3

簡単に言うと、私は 2 台の PC を持っています。

PC 1 では DST がオフになっています

PC 2 では DST がオンになっています。

PC 1 は、PC 2 に DateTime を送信し、それを使用して時刻を設定します。

上記のすべてが整っていますが、私の質問は、PC 2 が DateTime を受信したときに、DST 調整が必要かどうかを確認するにはどうすればよいですか?

PC は英国ベースです。

編集:- 混乱がある場合に備えて、もう少し詳しく説明します。PC 2 が PC 1 から時刻を取得すると、システムの時刻がこの値に変更されますが、+/- 1 時間 (DTS) が必要な場合は、システムの日付と時刻を設定する前に適用されることを確認する必要があります。

4

2 に答える 2

2

トランスポートと永続性にはUTCを使用することをお勧めします。

また、アルゴリズムの重要な部分として日時を使用しないように注意してください。これは単なるデータです。日付と時刻がずれて修正されます。PCが修正するとクラッシュするアプリを見たことがあります:)

このトピックに関する詳細情報が記載された別の投稿があります: 夏時間とタイムゾーンのベストプラクティス

于 2013-03-06T16:09:28.907 に答える
1

コードは表示されませんでしたが、質問にというタグを付けたので、その観点から回答します。

同じ瞬間について話していることを確認する必要がある場合は、から取得される などのDateTimewith を使用します。.Kind = DateTimeKind.UtcDateTime.UtcNow

PC1 がそれ​​を 1 回であると考え、PC2 が別の時間であると考えたことを実際に知る必要があり、これら 2 つのことが同じ瞬間を表していることを知りたい場合は、DateTimeOffset. これには、コンピューターのローカルの日付と時刻、および日付と時刻が表す UTC からのオフセットが含まれます。

どちらのアプローチでも、トランスポートと永続化にはISO8601形式を使用する必要があります。これにより、オブザーバーのカルチャやタイム ゾーンに関係なく意味が明確になります。.Net では、これは.ToString("o")from または のいずれかDateTimeで取得されますDateTimeOffset

ISO8601 形式の UTCDateTimeは次のようになります。

2013-03-06T09:00:00Z

ISO8601 形式の ADateTimeOffsetは次のようになります。

2013-03-06T10:00:00+01:00

.Net はこれをラウンド トリップパターンと呼んでいます。これは、説明した正確な目的のために設計されているためです。

詳細については、この投稿DateTimeOffsetを参照してください。

于 2013-03-06T16:44:57.570 に答える