Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Swift辞典

  1. トップページ
  2. Swift辞典
  3. Date / DateFormatter / Calendar

Date / DateFormatter / Calendar

SwiftのFoundationフレームワークの『Date』『DateFormatter』『Calendar』を使うと、日時の操作・表示フォーマット・日付計算を行えます。

クラス一覧
クラス / プロパティ概要
Date()現在の日時を表すオブジェクトを作成します。
DateFormatterDate と文字列を相互変換するクラスです。
DateFormatter.dateFormat日時の書式文字列を設定します(例:yyyy/MM/dd)。
DateFormatter.localeロケールを設定します。
Calendar暦計算・日付コンポーネントの取得・日付の加算・減算を行います。
DateComponents年・月・日・時・分・秒などの日時コンポーネントを表す構造体です。
timeIntervalSince19701970年1月1日からの経過秒数(Unix タイムスタンプ)を返します。
サンプルコード
import Foundation

// 現在日時の取得
let now = Date()
print("現在: \(now)")

// DateFormatter: Date ↔ 文字列変換
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
formatter.locale = Locale(identifier: "ja_JP")

let dateString = formatter.string(from: now)
print("フォーマット済み: \(dateString)")

// 文字列から Date に変換
if let parsedDate = formatter.date(from: "2026/03/06 12:00:00") {
    print("パース: \(parsedDate)")
}

// Calendar: 日付コンポーネントの取得
let calendar = Calendar.current
let components = calendar.dateComponents([.year, .month, .day, .hour], from: now)
print("年: \(components.year!), 月: \(components.month!), 日: \(components.day!)")

// Calendar: 日付の加算
var addComponents = DateComponents()
addComponents.day = 7  // 7日後

if let nextWeek = calendar.date(byAdding: addComponents, to: now) {
    print("1週間後: \(formatter.string(from: nextWeek))")
}

// 2つの日付の比較
let date1 = now
let date2 = calendar.date(byAdding: .hour, value: 3, to: now)!
print("date2 は date1 より後: \(date2 > date1)")

// タイムスタンプ
print("Unix タイムスタンプ: \(Int(now.timeIntervalSince1970))")
概要

『Date』は内部的に UTC(協定世界時)で時刻を表します。表示時には『DateFormatter』でロケールやタイムゾーンを設定して変換します。

『DateFormatter』は生成コストが高いため、毎回生成せず static プロパティや lazy var として再利用することが推奨されます。dateFormat の書式文字列は大文字・小文字が重要です。'MM' は月、'mm' は分を表します。誤った書式文字列では nil が返ることがあります。

URL 操作についてはURL / URLComponents / URLSessionを参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。