3

私が試してみると:

DateTime.Now.Subtract(DateTime.UtcNow)

結果はゼロに非常に近いと思います。しかし、そうではありません。代わりに、タイムゾーンの違いです。私の場合は-4時間です。.Kindがあります-DateTimeはタイムゾーンが異なることを知っています。なぜそれは私のためにこれを追跡しないのですか?Kindを正しく使用するSubtractのフレーバーはありますか?

(参考までに、それぞれが出力するものの良い要約は、https ://stackoverflow.com/a/3229429/237091で見ることができます)

4

3 に答える 3

6

え?プロパティは日付のKind計算を変更しません。タイムゾーンメソッドでのみ使用されます。

あなたは私があなたに期待するであろう結果を正確に得る。なぜあなたがゼロを期待していたのか理解できません。

于 2012-08-21T19:54:13.170 に答える
4

.Kindがあります-DateTimeはタイムゾーンが異なることを知っています。なぜそれは私のためにこれを追跡しないのですか?

なぜならDateTime根本的に壊れているからです(そしてもっとあります...)。IMOある種類の値を別の種類の値から減算しようとすると、文句を言うはずです。ただし、いいえ、各値で解釈されていない日付/時刻を使用するだけです。Kind残念ながら、実際に気付く操作はほとんどありません。(を使用する場合TimeZoneInfo、それらの操作それに注意します。)

Kind.NET2.0にハッキングされました。それまでは、DateTime値はそれがどのようなものであるかさえ知りませんでした-使用した場合:

dt = dt.ToLocalTime().ToLocalTime().ToLocalTime();

同じオフセット変更を数回適用します。BCLチームは、バイナリ表現でいくつかのスペアビットを見つけ、それをに使用しましたKind

基本的に、私はあなたの痛みを感じます。個人的には、このような操作で例外が発生した場合は、それを好みます。DateTimeローカルからUTCを減算するDateTimeか、その逆はほとんど意味がありません、IMO。

完全に偏ったプラグとして、、、、、、およびの概念を分離し、無意味な算術を実行させないNodaTimeを使用できます私たちの目的は、BCLよりも優れたAPIを提供することです。もちろん、それは必ずしも私たちが成功したことを意味するわけではありません:)InstantLocalDateLocalTimeLocalDateTimeOffsetDateTimeZonedDateTime

于 2012-08-21T19:56:42.760 に答える
0

DateTimeオブジェクトは現地時間を表します(UTC時間とタイムゾーンオフセットではありません)。プロパティがUTCと等しい場合でもKind、ゼロタイムゾーンの現地時間を保存しているだけです。現地時間でなければ、UtcNow物件の理由はありません。

DateTimeはタイムゾーンも保存しません。UTCに等しい場合Kind、少なくともタイムゾーンがゼロであることがわかりますが、Kindがローカルまたは指定されていない場合、タイムゾーンを知る方法はありません(KindプロパティはUnspecifiedデフォルトで等しい)。

したがって、Subtractタイムゾーンが不明であるため、このメソッドはタイムゾーンを計算に組み込むことができません。

于 2012-08-21T19:56:47.750 に答える