AWSで扱っている日付時刻データフォーマットいろいろ

AWSで使われている日付時刻の表記方法を確認しましょう。
2024.06.27

こんにちは。サービス開発室の武田です。

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で割れば小数点含むエポックミリ秒になります17194464001111719446400.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を例に確認しましょう。

参考URL