
AWSで扱っている日付時刻データフォーマットいろいろ
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。サービス開発室の武田です。
AWSを利用しているとさまざまなところで「日付時刻データ」を目にします。AWSの各サービスで提供されている日付時刻データは次のいずれかのフォーマットです。
- ISO 8601
- UNIX時間
ISO 8601は日付・時刻を表記するための国際規格です。日付 T 時刻 タイムゾーンが並べられた文字列です。基本形式と拡張形式が定義されていますが、AWSでは拡張形式が一般的かと思われます。
- 基本形式:
20240627T000000Z - 拡張形式:
2024-06-27T00:00:00Z
末尾のZはタイムゾーンでZはUTCを表します。日本時間の場合は+09:00などが代わりに付きます。
ISO 8601は文字列による表現でしたが、UNIX時間は数値による表現です。UNIX時間はエポック秒とも呼ばれ、 UTCでの 1970年1月1日午前0時0分0秒 からの経過秒数を表します。たとえば先ほどの2024-06-27T00:00:00Zは、UNIX時間では1719446400となります。
さてここまでUNIX時間の「エポック秒」というものを紹介しましたが、実は「エポックミリ秒」や「エポックマイクロ秒」などもあります。その名のとおり、経過ミリ秒数や経過マイクロ秒数で表したものです。
- エポック秒:
1719446400 - エポックミリ秒:
1719446400000 - エポックマイクロ秒:
1719446400000000
なお、エポックミリ秒は 1000で割れば小数点含むエポックミリ秒になります 。1719446400111と1719446400.111は見方によっては 同じデータとみなせる わけですね。ややこしくなってきましたね?
AWSでの日付時刻フォーマット例
日付時刻データの表し方を説明してきました。「まぁそれくらいなら知ってるよ」という方も多いでしょう。それでは具体例として、AWSで採用されているフォーマットを確認してみましょう。あくまで身の回りを探して見つけたものです。みなさんもいろいろ確認してみてください。
ISO 8601、秒、UTC
EventBridgeのイベントから送られてくるデータのtimeがこれでした。
具体例: 2019-02-26T19:42:21Z
ISO 8601、ミリ秒、UTC
Step Functionsのコンテキストデータに含まれるStartTimeがこれでした。
具体例: 2019-03-26T20:14:13.192Z
ISO 8601、秒、JST
$ aws health describe-events --region us-east-1を叩いた結果のstartTimeがこれでした。ただしドキュメントを読む限りは、このフィールドは小数点含むエポック秒のようです。
具体例: 2024-06-26T11:20:00+09:00
ISO 8601、ミリ秒、JST
$ aws health describe-events --region us-east-1を叩いた結果のlastUpdatedTimeがこれでした。ただしドキュメントを読む限りは、このフィールドは小数点含むエポック秒のようです。
具体例: 2024-06-26T15:26:31.196000+09:00
エポック秒
DynamoDBのTTLはエポック秒で保存する必要があります。
具体例: 1547152440
エポックミリ秒
EventBridgeから送られてくるStep Functionsイベントの詳細情報がこれでした。
具体例: 1547148840101
まとめ
aws health describe-eventsの結果に含まれる日付時刻データのフォーマットが想定と異なるのは、AWS CLIで何かやっているということなんでしょうか?この辺、知見ある方教えてください。
日付時刻データの表現の違いと、実際にAWSで採用されているケースを個別に見てみました。ただデータを「見る」だけであれば、これらの違いはあまり影響がないでしょう。しかしプログラムなどで何か処理をしようとすると、これらを意識しないといけなくなります。
次回は日付時刻データを相互運用する際のコードを、Pythonを例に確認しましょう。







