2

現在の時刻を DB に保存されている 2 つの時刻と比較する必要がある C# の Windows コンソール アプリケーションがあります。DB に挿入する前に UTC に変換された日付と時刻。ここで、これらの値をフェッチし、時間部分のみを現地時間と比較する必要があります。私の日付が次のようになっているとしましょう:

DateTime dt1 = new DateTime(2013, 08, 29, 00, 00, 00)
DateTime dt2 = new DateTime(2013, 08, 29, 23, 59, 59)

これら 2 つの日付を UTC に変換して DB に保存すると、DB の値は「28/08/2013 18:30:00」と「29/08/2013 18:00:00」のようになります。

私の現在の現地時間が '14:00:00' で、確認する条件は、私の現地時間が DB 日時値の時間部分の間にある必要があるとします。お気に入り

if(DateTime.Now.TimeOfDay >= DBTime1 && DateTime.Now.TimeOfDay <= DBTime2)`
{
//true condition logic
}

データベースの日時をローカルに変換して比較すると、ローカル システムで期待どおりに動作しています。私の疑問は、アプリケーションが英国のサーバーでホストされていて、インドからアクセスしている場合、時間比較が期待どおりに機能するかどうかです。現地時間に変換する際に、DST (Day Saving Time) や TimeZone などを考慮する必要がありますか?

4

2 に答える 2

0

DateTime.Now.TimeOfDayタイプですDateTimeKind.Local

DBTime1DB に格納されている は Utc 時刻であり、C# では次のように「ハイドレート」する必要があります。DateTimeKind.Utc

( DateTimeKind 情報)

DB時間はUTCであるため、現地時間に変換すると、現地時間情報(タイムゾーン、DSTなどを含む)が正しく設定されている限り、これらの一方を他方の形式に変換して比較する理由がわかりません間違って出てくるでしょう。実際、別の方法で DateTime.UtcNow を使用する方が簡単です。

DateTime.UtcNow.TimeOfDay >= DbTime1 && DateTime.UtcNow.TimeOfDay <= DBTime2

これが何を意味するのか、つまり、現在の時刻 (タイム ゾーン情報で調整) が上記の 2 つの時刻の間にあるかどうかを確認していることに注意してください。DbTime1 は常に DbTime2 よりも小さいですか? それ以外の場合であることを確認するために、いくつかのチェックを行う必要がある場合があります。

于 2013-08-29T15:53:43.537 に答える