DateTimeと解析されたDateTimeOffsetティックの比較の違い

ヴィヴェンディ

2つのアプリケーションがあります。クライアントアプリとサーバーアプリ。

クライアントアプリは、リクエストの本文にが含まれているサーバーにHTTPリクエストを送信しますDateTime

私が受け取ったサーバーでDateTime、それをに変換TicksしてSQLiteデータベースに保存します。(なぜティックなのかについて議論することもできますが、それがこのアプリケーションのビルド方法です。)

ここまでは順調ですね。

少し後(数分)に、サーバーアプリケーションはデータベースに対してクエリを実行し、過去30分間のすべてのレコードをクエリしようとします。

コードでは、現在のDateTimeマイナス30分を取得するために次のようなことを行います

DateTimeOffset.Now.AddMinutes(-30).Ticks;

何らかの理由で、この数は新しく作成されたレコードのタイムスタンプよりも大きくなります。

私はおそらく何かが足りないのですが、私はそれを見ていません...

これが私の問題を完全に模倣するコードです。(投稿の下部にある作業デモへのリンク)

public static void Main()
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Client app
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    var clientTimestamp = DateTimeOffset.Now.DateTime;
    var jsonDateTime = clientTimestamp.ToString("yyyy-MM-ddThh:mm:ss.fffZ");


    // Then, the client app sends data as JSON to the server app...


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Server app
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////

    // Mimick as if we received a json string with a DateTime in it. Parse that back to a real DateTime object.
    // This is also the value that will be stored in the database
    var serverDateTime = DateTime.Parse(jsonDateTime);
    Console.WriteLine("Ticks serverDateTime:             " + serverDateTime.Ticks.ToString());


    // A minute or so later, a recurring job checks the database for newly added records in the range of: 30 minutes ago till now.

    // Create a new DateTime Now minus 30 minutes... Both Ticks values below are greater than the jsonDateTime ticks?

    // DateTimeOffset:
    // This value is larger, even with the minus -10 minutes?
    var nowDateTimeOffset = DateTimeOffset.Now.AddMinutes(-10).Ticks.ToString();
    Console.WriteLine("Ticks nowDateTime -10 minutes:    " + nowDateTimeOffset);

    // DateTime
    // This value is larger, even with the minus -10 minutes?
    var nowDateTime = DateTimeOffset.Now.AddMinutes(-10).Ticks.ToString();
    Console.WriteLine("Ticks nowDateTime -10 minutes:    " + nowDateTime);
}

これがデモです:https//dotnetfiddle.net/58Un0p

ハルド

この場合、問題はDateTimeの形式にあるようです。

"yyyy-MM-ddThh:mm:ss.fffZ"  // lower hh

一方、次のようになります。

"yyyy-MM-ddTHH:mm:ss.fffZ"  // upper HH

hh24時間(HH)形式ではなく12時間()形式を使用すると、50%の確率で12時間の差が生じます。


ハンスがコメントで述べているように、UTCを使用してDateTime値を比較していることを確認する必要があります。DateTime.Parseデフォルトでは、DateTimeの種類はに設定されていますDateTimeKind.LocalクライアントはUTCDateTimeを送信していますか?

クライアントのタイムスタンプを更新して、UTCDateTimeをToUniversalTime次のように送信します

var clientTimestamp = DateTimeOffset.Now.ToUniversalTime();

代わりにDateTime.Parse考えるDateTime.ParseExactAdjustToUniversal

// convert the date to UTC before saving to database
var utcServerDate = DateTime.ParseExact(jsonDateTime, "yyyy-MM-ddTHH:mm:ss.fffZ", 
                         CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);

そして、DateTimeOffset.Now値の使用を比較するときUtcTicks

var nowDateTimeOffset = DateTimeOffset.Now.AddMinutes(-30).UtcTicks;

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

説明されていない動作==でのプリミティブとラッパーオブジェクトの比較

分類Dev

VueJs、計算されたプロパティとウォッチャーの違いは?

分類Dev

VueJs、計算されたプロパティとウォッチャーの違いは?

分類Dev

計算されたプロパティとクロージャー付きのプロパティセットの違い

分類Dev

Androidで選択、チェック、アクティブ化された状態の違いは何ですか?

分類Dev

Spring Data RESTとカスタムエンティティルックアップ(間違ったタイプのIDが提供されました)

分類Dev

Spring Data RESTとカスタムエンティティルックアップ(間違ったタイプのIDが提供されました)

分類Dev

アクティビティが破壊されたときのアクティビティのバックスタックの誤動作

分類Dev

継承されたクラスのプロパティの属性の違い

分類Dev

Angular 2:ngIfディレクティブの比較演算子==と===の違い

分類Dev

同期された(this)クラスといくつかの同期されたクラスのメソッドの違い

分類Dev

同期(obj)と宣言されたロックの使用の違い

分類Dev

クエリ式に示されているパーティションキーとcosmosdbのfeedoptionsの違い

分類Dev

瞬間からの時間をdivクラスのセットと比較する関数を作成したいと思います(これが間違って表現されている場合は申し訳ありませんがコーディングは初めてです)

分類Dev

計算されたプロパティとしてDateTimeスタンプを比較して組み合わせるための最良の方法は何ですか?

分類Dev

コミットされた命令とコミットされた操作の違い

分類Dev

異なるパーティションにマウントされた場合の/と/ mnt / upgradeの違い

分類Dev

GPartedのクリアされたパーティションとフォーマットされていないパーティション

分類Dev

mysqlは、クエリされた2つのフィールドの結果との違いを取得します

分類Dev

計算されたプロパティの「model.property」と「property」の違いは何ですか?

分類Dev

EFがエンティティの間違ったキーにマッピングされています

分類Dev

返されたフィールドの違いをdjangoクエリセットの変数と比較します

分類Dev

ボックス化されたプリミティブ値の動的比較

分類Dev

コンポーネントが導入された Angular のバージョンと、ディレクティブとの違いは何ですか?

分類Dev

RとPythonのロジスティック回帰の違い

分類Dev

オブジェクトのプロパティをチェックするときの未定義または「未定義」との比較。違いはなんですか?

分類Dev

アラートが間違っていると表示されます。clickedcolorをpickedcolorと比較したい場合、他のロジックはありますか?

分類Dev

破壊されたアクティビティと強制終了されたプロセスの違い

分類Dev

配列[ticks、offset]として保存されたDatetimeOffsetのMongoDB TTLインデックスを作成するにはどうすればよいですか?

Related 関連記事

  1. 1

    説明されていない動作==でのプリミティブとラッパーオブジェクトの比較

  2. 2

    VueJs、計算されたプロパティとウォッチャーの違いは?

  3. 3

    VueJs、計算されたプロパティとウォッチャーの違いは?

  4. 4

    計算されたプロパティとクロージャー付きのプロパティセットの違い

  5. 5

    Androidで選択、チェック、アクティブ化された状態の違いは何ですか?

  6. 6

    Spring Data RESTとカスタムエンティティルックアップ(間違ったタイプのIDが提供されました)

  7. 7

    Spring Data RESTとカスタムエンティティルックアップ(間違ったタイプのIDが提供されました)

  8. 8

    アクティビティが破壊されたときのアクティビティのバックスタックの誤動作

  9. 9

    継承されたクラスのプロパティの属性の違い

  10. 10

    Angular 2:ngIfディレクティブの比較演算子==と===の違い

  11. 11

    同期された(this)クラスといくつかの同期されたクラスのメソッドの違い

  12. 12

    同期(obj)と宣言されたロックの使用の違い

  13. 13

    クエリ式に示されているパーティションキーとcosmosdbのfeedoptionsの違い

  14. 14

    瞬間からの時間をdivクラスのセットと比較する関数を作成したいと思います(これが間違って表現されている場合は申し訳ありませんがコーディングは初めてです)

  15. 15

    計算されたプロパティとしてDateTimeスタンプを比較して組み合わせるための最良の方法は何ですか?

  16. 16

    コミットされた命令とコミットされた操作の違い

  17. 17

    異なるパーティションにマウントされた場合の/と/ mnt / upgradeの違い

  18. 18

    GPartedのクリアされたパーティションとフォーマットされていないパーティション

  19. 19

    mysqlは、クエリされた2つのフィールドの結果との違いを取得します

  20. 20

    計算されたプロパティの「model.property」と「property」の違いは何ですか?

  21. 21

    EFがエンティティの間違ったキーにマッピングされています

  22. 22

    返されたフィールドの違いをdjangoクエリセットの変数と比較します

  23. 23

    ボックス化されたプリミティブ値の動的比較

  24. 24

    コンポーネントが導入された Angular のバージョンと、ディレクティブとの違いは何ですか?

  25. 25

    RとPythonのロジスティック回帰の違い

  26. 26

    オブジェクトのプロパティをチェックするときの未定義または「未定義」との比較。違いはなんですか?

  27. 27

    アラートが間違っていると表示されます。clickedcolorをpickedcolorと比較したい場合、他のロジックはありますか?

  28. 28

    破壊されたアクティビティと強制終了されたプロセスの違い

  29. 29

    配列[ticks、offset]として保存されたDatetimeOffsetのMongoDB TTLインデックスを作成するにはどうすればよいですか?

ホットタグ

アーカイブ