web-dev-qa-db-ja.com

特定のUTC時間形式YYYY-MM-DDTHH:MM:SS.SSSZを理解する

関連する質問が2つあります。

BSTで実行されているプログラムが、UTC YYYY-MM-DDTHH:MM:SS.SSSZ形式で現在時刻の日付時刻値を生成すると仮定します。

また、ロンドンの現在の時刻が2016-06-01 12:33:54だと仮定します

1)プログラムで指定された現在の時刻が2016-06-01T11:33:54.000Zである場合、プログラムは間違っていますか?

2)BSTのサマーオフセットは、YYYY-MM-DDTHH:MM:SS.SSSZの対応する時間形式でどのように記録されるか

私はYYYY-MM-DDTHH:MM:SS + 0001と仮定します私は正しいですか?

9
QVSJ

まず、iso8601情報をお読みください。異なるタイムゾーン(サーバーのタイムゾーンとクライアントのタイムゾーンなど)の時間を処理する場所が一般的になりつつあり、標準は非常に便利です。

特に、UTCまたは「Zulu」時間についてお読みください こちら

1)夏時間のロンドン時間は「UTC」時間よりも1時間早いため、プログラムは正しい

2)末尾の「Z」は、UTC(ズールー語)の短い表記です。 「Z」の代わりに「+00:00」と書くこともできます。 SS.SSSは秒とミリ秒を指します-タイムゾーンとは関係ありません。 devnullのコメントで、彼は夏にオフセットを適用する方法を示しています。

編集

Iso8601のタイムゾーンにタイムゾーンが含まれるかどうか、および実際にタイムゾーンが出力されるかどうかについてのコメントで議論がありました。

これは、日付/時刻の実装に完全に依存します。 SimpleDateFormatを使用している場合、タイムゾーンがサポートされ、出力されます。

以下に説明するコード例を示します

SimpleDateFormat formatter = new SimpleDateFormat("YYYY-MM-dd'T'HH:mm:ss.SSSXXX");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(formatter.format(new Date()));
formatter.setTimeZone(TimeZone.getTimeZone("Europe/London"));
System.out.println(formatter.format(new Date()));

出力

2016-06-02T12:53:14.924Z
2016-06-02T13:53:14.925+01:00

当然、joda-timeなどの別の日付/時刻ライブラリを使用している場合、実装の詳細は異なります。

8
vikingsteve