1

この振る舞いにより、私は先週かなりの時間を無駄にしました。なぜこれがこのように設計されたのかについて誰かが説明していますか???|
(私はPSTにいるので、DSTオフセットは現在+7です)

var utc = new DateTime(2012, 6, 5, 9, 0, 0, DateTimeKind.Utc);  
var lcl = new DateTime(2012, 6, 5, 8, 0, 0, DateTimeKind.Local);  // this is 15:00 Utc
Assert.IsTrue(lcl.ToUniversalTime() > utc);   //  THIS SUCCEEDS  (as it should)
Assert.IsTrue(lcl > utc);                     //  THIS FAILS (with the same times!!!)

私の実際のコードでは、親切にDateTimeKind.Localに設定された変数は、元々 DateTimeKind.Utc(別のマシン上)で設定されていましたが、比較が行われているマシンへのネットワーク転送後に評価されていたため、これは二重に混乱しました。 、および転送中にその種類が変更されました(net.tcpリモーティングを使用)

4

2 に答える 2

3

これは既知であり、これに関連しています:http: //msmvps.com/blogs/jon_skeet/archive/2012/05/02/more-fun-with-datetime.aspx

于 2012-06-05T13:06:34.300 に答える
0

これはバグではなく、「機能」です。

タイプはDateTimeタイムゾーンを認識しないため、Kindプロパティ(「Unspecificed」、「Local」、または「Utc」の場合があります)を比較するための適切な方法はありません。実際、.NET 1.xには、Kindプロパティすらありませんでした。

異なるタイムゾーンの日付/時刻値を比較する必要がある場合は、などのタイムゾーンを認識するタイプを使用する必要がありますDateTimeOffset

于 2012-06-05T13:57:56.470 に答える