私は、サーバーからアラートを受け取るアプリケーションを開発中です。アラートを処理している間、私は最後の時間を計算し、アラートは次のようにして送信された:それは私が、サーバーがアクティブであるかどうかを把握することができますので、DateTime.NowとDateTime.Utcの標準化
TimeSpan? alertDiffTimespan = DateTime.UtcNow - serverEventInfo.lastAlert
正確なタイムスパンが重要です。
遅くとも、serverEventInfo.lastAlert
が正しく(つまり、DateTime.UtcNowとしてフォーマットされている)、現在の時間よりも1時間遅れている(DateTime.Nowなど)ことがあることに気付きました。私は、次の試してみました:
TimeSpan? alertDiffTimeSpan = DateTime.UtcNow - serverEventInfo.lastAlert.Value.ToUniversalTime()
をしかし、それはすべての値がDateTime.UtcNow
として設定されていることに来て正しくフォーマットされているが、DateTime.Now
として設定されたものが正しいことを意味します。
私はDateTime.Kindも同様に判断しようとしましたが、毎回Unspecifiedとしてフラグを立てていますので、違いはありません。
私がどんなにがUtcNow
またはNow
値が入ってくるかどうか、私はまだそれを正しく処理し、正しいalertDiffTimeSpan
を得ることができるように自分のアプリケーションの中に入ってくるのDateTime値を標準化するために何かできることはありますか?
日付は{0:MM/dd/yyyy hh:mm:ss tt}
の形式で、String.Format("{0:MM/dd/yyyy hh:mm:ss tt}", DateTime.Now)
またはString.Format("{0:MM/dd/yyyy hh:mm:ss tt}", DateTime.UtcNow)
と設定されています。
どのような形式でdatetimesを受信していますか?彼らがUTCかどうかを指定しなければ、自分で推測できる方法はありません。 – Rob
https://xkcd.com/1179/は唯一の受け入れ可能な回答です...(しかし、情報が不足しているポストがどこから来ているかを知ることは非常に難しいです) –
'DateTime.Now'!=' DateTime。 Utc(今) '前者は現地時間(機械の地域設定に基づく)に調整され、後者はISO 8601形式を使用します。異なるタイムゾーンでユーザーの入力を処理する最も安全な方法は、最初にISO形式に変換してからローカルのものとして表示することです。 –