あいまいなDateTimeOffsetの例

トーマス・ダウト

データベース/モデルにDateTimeOffsetsがあります。これらの値をWebで表示するために、DateTimeOffsetsを現在のユーザーのタイムゾーンに変換します。

MSDNによると、DateTimeOffsetは特定のTimeZoneではあいまいになる可能性があります。

TimeZoneInfo.IsAmbiguousTimeメソッド(DateTimeOffset)

これは私にはまったく意味がありません。あいまいなDateTimeOffsetを教えてもらえますか
TimeZone「W.EuropeStandardTime」にいます。

マットジョンソン-パイント

ここで「曖昧」を定義する方法が混乱の原因だと思います。

明確にするために、aDateTimeOffsetはそれ自体にあいまいになることはありません。それは常に絶対的な瞬間の特定の瞬間を表しています。日付、時刻、およびオフセットが与えられると、ローカルの実時間と正確なUTC時刻(オフセットを適用することにより)の両方を知ることができます。

ただし、値のウォールタイム部分は、特定のタイムゾーン内であいまいになる可能性があります。つまり、オフセットを無視した場合の日付と時刻のみですそれTimeZoneInfo.IsAmbiguousTimeがあなたに言っていることです。ことは、それはオフセットがなければ、値はあいまいになります。ウォールタイムは、そのタイムゾーンの人が混乱する可能性がある時間です。

このメソッドには2つのオーバーロードがあることを考慮してください。1つはaを取り、DateTimeもう1つはDateTimeOffsetを取ります

  • DateTimeとき1は完璧な理にかなって.KindいますDateTimeKind.Unspecified

    DateTime dt = new DateTime(2016, 10, 30, 2, 0, 0);
    TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");
    bool ambiguous = tz.IsAmbiguousTime(dt);  // true
    
  • 最初に指定されたタイムゾーンへの変換を行うため、他の種類では少し意味がありませんが、それでも同じことを行います。

    DateTime dt = new DateTime(2016, 10, 30, 1, 0, 0, DateTimeKind.Utc);
    TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");
    bool ambiguous = tz.IsAmbiguousTime(dt);  // true
    
  • DateTimeOffset過負荷は、基本的に前の例と同じことをやっています。オフセットが何であれ、それは日付と時刻に適用され、最初の例のように、結果の日付と時刻だけであいまいさがチェックされます。

    DateTimeOffset dto = new DateTimeOffset(2016, 10, 30, 2, 0, 0, TimeSpan.FromHours(1));
    TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");
    bool ambiguous = tz.IsAmbiguousTime(dto);  // true
    
  • そのタイムゾーンには意味のないオフセットがあっても、比較する前に適用されます。

    DateTimeOffset dto = new DateTimeOffset(2016, 10, 29, 19, 0, 0, TimeSpan.FromHours(-5));
    TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");
    bool ambiguous = tz.IsAmbiguousTime(dto);  // true
    

つまり、オーバーロードの実装に要約されます。これは基本的に次のとおりです。

// Make sure the dto is adjusted to the tz.  This could be a no-op if it already is.
DateTimeOffset adjusted = TimeZoneInfo.ConvertTime(dto, tz);

// Then just get the wall time, stripping away the offset.
// The resulting datetime has unspecified kind.
DateTime dt = adjusted.DateTime;

// Finally, call the datetime version of the function
bool ambiguous = tz.IsAmbiguousTime(dt);

これは、こちらの.netリファレンスソースで確認できます彼らはそれを2行に要約し、DSTが適用できない場合にパフォーマンスを向上させるためのショートカットを前に付けますが、それはそれが行うことです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

あいまいな関数のオーバーロード [例 max()]

分類Dev

「??」のあいまいな使用

分類Dev

匿名クラスの「変数の例が初期化されていない可能性があります」

分類Dev

あなたからの例はJSを知らない

分類Dev

Javaバージョン間の下位互換性のない具体的な例はありますか?

分類Dev

Firebaseのあいまいな参照「FIRMessagingAPNSTokenType ...があいまいです」

分類Dev

LaravelのchunkByIdのあいまいな列

分類Dev

この使用例では、TCP_CORKとTCP_NODELAYの間に大きな違いはありますか?

分類Dev

DDDの良い例はどこにありますか?

分類Dev

この例はいつ使用する必要がありますか?

分類Dev

継承の例を作る、まあ...悪い

分類Dev

Azure SQL での Datetimeoffset の保存が機能しない

分類Dev

ptrdiff_tをdifference_typeとして使用しないイテレータの例はありますか?

分類Dev

FIFOページ置換アルゴリズムの実際的な例について混乱がありますか?

分類Dev

Helloworldの例が機能しない-NodeJSを埋め込む必要がありますか?

分類Dev

参照へのあいまいな変換

分類Dev

追加のあいまいな使用?

分類Dev

あいまいな暗黙の値

分類Dev

演算子「+」のあいまいな使用

分類Dev

CTTelephonyNetworkInfoのcurrentRadioAccessTechnologyあいまいな応答

分類Dev

'observeSingleEvent(of:with :)のあいまいな使用

分類Dev

型族のあいまいな型

分類Dev

監視FirebaseDBのあいまいな使用

分類Dev

演算子 '>'のあいまいな使用

分類Dev

'initialize()'のあいまいな使用

分類Dev

'init'のあいまいな使用

分類Dev

assertEqualsへのあいまいな参照

分類Dev

Ansibleのあいまいなenv値

分類Dev

strcmp()のあいまいな動作

Related 関連記事

  1. 1

    あいまいな関数のオーバーロード [例 max()]

  2. 2

    「??」のあいまいな使用

  3. 3

    匿名クラスの「変数の例が初期化されていない可能性があります」

  4. 4

    あなたからの例はJSを知らない

  5. 5

    Javaバージョン間の下位互換性のない具体的な例はありますか?

  6. 6

    Firebaseのあいまいな参照「FIRMessagingAPNSTokenType ...があいまいです」

  7. 7

    LaravelのchunkByIdのあいまいな列

  8. 8

    この使用例では、TCP_CORKとTCP_NODELAYの間に大きな違いはありますか?

  9. 9

    DDDの良い例はどこにありますか?

  10. 10

    この例はいつ使用する必要がありますか?

  11. 11

    継承の例を作る、まあ...悪い

  12. 12

    Azure SQL での Datetimeoffset の保存が機能しない

  13. 13

    ptrdiff_tをdifference_typeとして使用しないイテレータの例はありますか?

  14. 14

    FIFOページ置換アルゴリズムの実際的な例について混乱がありますか?

  15. 15

    Helloworldの例が機能しない-NodeJSを埋め込む必要がありますか?

  16. 16

    参照へのあいまいな変換

  17. 17

    追加のあいまいな使用?

  18. 18

    あいまいな暗黙の値

  19. 19

    演算子「+」のあいまいな使用

  20. 20

    CTTelephonyNetworkInfoのcurrentRadioAccessTechnologyあいまいな応答

  21. 21

    'observeSingleEvent(of:with :)のあいまいな使用

  22. 22

    型族のあいまいな型

  23. 23

    監視FirebaseDBのあいまいな使用

  24. 24

    演算子 '>'のあいまいな使用

  25. 25

    'initialize()'のあいまいな使用

  26. 26

    'init'のあいまいな使用

  27. 27

    assertEqualsへのあいまいな参照

  28. 28

    Ansibleのあいまいなenv値

  29. 29

    strcmp()のあいまいな動作

ホットタグ

アーカイブ