iOS時間ライブラリでタイムスタンプと時間単位を扱う方法

量子脆脆鲨

Time Analytics
timestamp
time unit
2025-09-17
iOS時間ライブラリでタイムスタンプと時間単位を扱う方法

iOS時間ライブラリでタイムスタンプと時間単位を扱う方法

iOSアプリ開発では時間処理が頻繁に必要になります。FoundationフレームワークのDate、Calendar、DateComponentsクラスを使うと、効率的に時間を扱えます。

基本の時間操作

現在時刻を取得するにはDate()を使います。UNIXタイムスタンプが必要な場合はtimeIntervalSince1970プロパティを使います。

let now = Date()
let timestamp = now.timeIntervalSince1970

時間のフォーマットにはDateFormatterが便利です。パフォーマンスを考慮して、staticなインスタンスを作成するのがおすすめです。

extension DateFormatter {
    static let shared: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        return formatter
    }()
}

時間計算の方法

Calendarクラスを使うと、日付の加算・減算が簡単にできます。例えば、1週間後の日付を計算するには:

let calendar = Calendar.current
let oneWeekLater = calendar.date(byAdding: .weekOfYear, value: 1, to: Date())

2つの日付の差を計算するにはdateComponentsメソッドを使います:

let startDate = Date()
let endDate = someFutureDate
let components = calendar.dateComponents([.hour, .minute], from: startDate, to: endDate)

時間単位の変換

時間単位を変換するには、MeasurementとUnitDurationが便利です。例えば、秒を時間に変換するには:

let seconds = Measurement(value: 3600, unit: UnitDuration.seconds)
let hours = seconds.converted(to: .hours)

タイムゾーンの扱い

ユーザーのローカルタイムゾーンを考慮するには、TimeZoneを使います。

let timeZone = TimeZone.current
DateFormatter.shared.timeZone = timeZone

パフォーマンスのヒント

  • DateFormatterの作成は重い処理なので、再利用しましょう
  • 頻繁に使うCalendarインスタンスはキャッシュしましょう
  • ISO8601DateFormatterは国際規格の日付処理に最適化されています

よくある問題と解決策

夏時間の切り替わり時期には、1時間のずれが発生することがあります。これを防ぐには:

calendar.timeZone = TimeZone(secondsFromGMT: 0)!

複数のカレンダー(和暦など)を扱う場合、localeの設定が重要です:

calendar.locale = Locale(identifier: "ja_JP")

最新の時間処理

Swift 5.5以降では、新しいClockプロトコルが導入されました。これを使うと、より宣言的に時間を扱えます。

let clock = ContinuousClock()
let duration = clock.measure {
    // 時間を計測したい処理
}

時間処理はiOSアプリ開発の基本です。Foundationフレームワークを正しく使えば、複雑な要件も効率的に実装できます。プロジェクトに応じて、適切な方法を選択しましょう。