Swift タイムスタンプを取得 - shirajira/family-account-ios GitHub Wiki

Swift タイムスタンプを取得

DateFormatter を使おう。

公式リファレンス:
DateFormatter | Apple Developer Documentation

実装例

以下は,実行時の時刻を指定のフォーマットに変換した文字列を取得する関数の実装例である。

func timestamp(format: String) -> String {
    let now = Date()
    let formatter = DateFormatter()
    formatter.locale = Locale(identifier: "en_US_POSIX")  // この記述の詳細は注意事項にて
    formatter.dateFormat = format
    let ret = formatter.string(from: now)
    return ret
}

このように使う。

let filename = timestamp(format: "yyyyMMdd-HHmmss") + ".json"
print(filename)
20210507-151550.json

注意事項

端末の設定(一般 > 言語と地域)の「暦法」はユーザ依存となっている。
基本は西暦(グレゴリオ暦)だが,和暦やタイ仏暦も設定可能。

例えばユーザの端末が和暦になっている場合,"yyyy" で取得できる年は "2021" ではなく "0003" になる。(西暦2021年は令和3年)

西暦で統一したほうが都合がよい場合は以下の設定を有効にするとよい。

formatter.locale = Locale(identifier: "en_US_POSIX")

ロケールの設定をしておくことで,ユーザの設定に左右されないフォーマットを維持することができる。

メモ

DateFormatter のインスタンス生成コストはやや大きいとのこと。
ループ内で繰り返し実行するようなケースでは,インスタンス生成を最初の1回だけにするなど賢く実装しましょう。


参考:
DateFormatterの使い方まとめ - Qiita