12

私は現在、UTC+1時間である英国夏時間にいます。次のコードで自分のPCが正しいことを確認し、trueを返します。

System.TimeZone.CurrentTimeZone.IsDaylightSavingTime(Date.Now)

私の質問は、なぜUTCフォーマッターが期待どおりに機能しないのかということです。

DateTime.Now.ToString("u")

正確な現在のシステム日付を以下のようにUTC形式で期待どおりに返しますが、最後にZ(ズールー時間)が+01:00ではありませんか?

すなわち

2009-05-27 14:21:22Z

いいえ

2009-05-27 14:21:22+01:00

これは正しい機能ですか?

4

3 に答える 3

23

MSDN は次のように述べています。

DateTimeFormatInfo.UniversalSortableDateTimePattern プロパティで定義されたカスタムの日付と時刻の形式文字列を表します。パターンは定義された標準を反映しており、プロパティは読み取り専用です。したがって、使用されるカルチャや提供される形式プロバイダーに関係なく、常に同じです。カスタム形式の文字列は "yyyy'-'MM'-'dd HH':'mm':'ss'Z'" です。

この標準の書式指定子を使用すると、書式設定または解析操作で常にインバリアント カルチャが使用されます。

書式設定では、日付と時刻のオブジェクトのタイム ゾーンは変換されません。したがって、アプリケーションは、この書式指定子を使用する前に、日付と時刻を協定世界時 (UTC) に変換する必要があります。

次のコードを使用して、現在の日付をフォーマットする前に UTC に変換する必要があります。

DateTime.UtcNow.ToString("u")

また

DateTime.Now.ToUniversalTime().ToString("u")

期待どおりの形式 (つまり、2009-05-27 14:21:22+01:00) で表示するには、カスタムの日付形式を使用する必要があります。

DateTime.Now.ToString("yyyy-MM-dd HH:mm:sszzz");
于 2009-05-27T13:32:55.933 に答える
7

"u" は、UTC 形式ではなく、ユニバーサルな並べ替え可能な日付/時刻パターンです。ドキュメントを引用するには:

DateTimeFormatInfo..::.UniversalSortableDateTimePattern プロパティで定義されたカスタムの日付と時刻の形式文字列を表します。パターンは定義された標準を反映しており、プロパティは読み取り専用です。したがって、使用されるカルチャや提供される形式プロバイダーに関係なく、常に同じです。カスタム形式の文字列は "yyyy'-'MM'-'dd HH':'mm':'ss'Z'" です。

この標準の書式指定子を使用すると、書式設定または解析操作で常にインバリアント カルチャが使用されます。

書式設定では、日付と時刻のオブジェクトのタイム ゾーンは変換されません。したがって、アプリケーションは、この書式指定子を使用する前に、日付と時刻を協定世界時 (UTC) に変換する必要があります。

于 2009-05-27T13:33:37.680 に答える
4

DateTime.Now.ToUniversalTime().ToString("u") を使用する必要があります。

于 2009-05-27T13:39:56.013 に答える