技術系TIPS
PR

【Kotlin】タイムスタンプからRFC3339 UTC「Zulu」形式の日付フォーマット作成

saratogax
記事内に商品プロモーションを含む場合があります

GooglePlayBilling でサブスクリプションの情報を取得する API のバージョンが変わりました。

これについては、以前紹介した通りです。

あわせて読みたい
【Google】purchases.subscriptionsv2のAPIとv1の互換性
【Google】purchases.subscriptionsv2のAPIとv1の互換性

ここで気になったのが日時の表記。

「RFC3339 UTC “Zulu” format」というのが気になりますね。

今回は、この日付のフォーマット作成やエポックミリ秒への変換を試していきます。

日付フォーマットの仕様

GooglePlayBilling の API の仕様を確認すると、以下の説明が記載されています。

A timestamp in RFC3339 UTC “Zulu” format, with nanosecond resolution and up to nine fractional digits. Examples: “2014-10-02T15:01:23Z” and “2014-10-02T15:01:23.045123456Z”.

purchases.subscriptionsv2

これまで通りエポックミリ秒でもいいのですが、レスポンスの中身を見ただけで日時がわかるというメリットはあります。

エポックミリ秒だと、日付フォーマットに変換しないとわからないですからね。

あわせて読みたい
エポックミリ秒を日時に変換(逆変換)するツール
エポックミリ秒を日時に変換(逆変換)するツール

現在日時のZuluフォーマット

Kotlin で実際に現在日時を Zulu フォーマット表記で表示させてみましょう。

import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

fun main() {
    val zulu = LocalDateTime.now().format(
        DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
    )
    println(zulu)
}

このソースコードを実行したのが 2022 年 11 月 16 日の 19 時台ということで、結果は以下の通り。

2022-11-16T10:08:20.669Z

Zuluフォーマットからエポックミリ秒への変換

では、GooglePlayBilling からレスポンスされた日付項目を、エポックミリ秒に変換する方法を考えてみます。

ここでは上記で使用した現在日時をサンプルとします。

import java.time.Instant
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

fun main() {
    val zulu = LocalDateTime.now().format(
        DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
    )    
    val em = Instant.parse(zulu).toEpochMilli()
    println(em)
}

結果は以下の通りです。

1668593300669

まとめ

RFC3339 UTC 「Zulu」 形式の日付フォーマットの変換について紹介してきました。

相互変換ができるようにしておけば、日付の扱いで困ることもありませんね。

自分のシステムだけであれば日付フォーマットは統一しておけますが、外部システムが絡むと厄介。

これが正解かと言われると未知数なので、Java の新しい日付クラスの情報も追いかけておきたいところです。

ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました