現在、複数の国とタイム ゾーンで使用される .net アプリケーションを開発しています。バックエンド データベースは sql サーバーです。
私はdatetime、datetime2、およびdatetimeoffsetのデータ型を調べてきましたが、少し混乱しています。
いくつかの例は、私の混乱を助けるかもしれません。在庫状況の開始日と終了日を含む製品データを含むテーブルがあるとします。そのため、開始日と終了日については、データは utc 日付として保存され、タイム ゾーンが含まれます。
データベースにクエリを実行し、開始日と終了日の間にないレコードを省略したい場合は、次のようにします。
select * from products where stardate <= getutcdate() and enddate >= getutcdate;
ただし、utc の日付はデータが必要な国の時間を反映していない可能性があるため、これは有効ではありません。タイム オフセットは適用されません。それで、これを回避する方法はありますか?
これに関する次の質問は、その国の夏時間がいつ変わるかということです。オフセットは変わらないのでしょうか? すなわち。オフセット値が正しくないため、データが古くなります。
アプリケーションのレイヤーを上に移動し、.net コードに移動します。データベースからデータを取得するときに、終了日/開始日を含む DateTimeOffset 変数を作成します。開始日と終了日を確認するために SQL に似たコードを書きたい場合、DateTime.UtcNow を使用すると同じ問題が発生しませんか?
私の混乱を助けるための助けは素晴らしいでしょう。