関連する質問が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と仮定します私は正しいですか?
まず、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
などの別の日付/時刻ライブラリを使用している場合、実装の詳細は異なります。