Swiftで現在時刻を取得する8選の方法

Swiftのロゴと時計のイメージが合体しているイラストSwift
この記事は約17分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Swiftを学び始めたあなたへ。

アプリ開発を行っていると、現在の日時を取得する場面は多々ありますよね。

例えば、ユーザーの行動ログを記録する際のタイムスタンプや、特定の時間に通知を送る機能など、さまざまな場面で現在時刻の取得は不可欠です。

この記事を読めばSwiftで現在時刻を簡単に取得する方法がマスターできるようになります。

Swiftで現在時刻を取得する基本から、カスタマイズの方法まで、実際のコードと共に詳しく解説していきます。

●Swiftでの現在時刻の基本

現在時刻を取得する際の核となるのは、SwiftのDateクラスです。

このクラスを使うことで、現在の日時情報を取得することができます。

○SwiftのDateとは

SwiftにおけるDateは、特定の瞬間を表すためのデータ型です。

具体的には、1970年1月1日0時0分0秒(UTC)からの経過秒数として日時情報を保持しています。

このコードではDate()を使って現在の日時を取得するコードを紹介しています。

この例ではDate()インスタンスを作成して現在の日時情報を取得しています。

let now = Date()
print(now)

上のコードを実行すると、現在の日時がUTC(協定世界時)で表示されます。

例として、実行した際に「2023-10-21 15:00:00 +0000」と表示されれば、実行した日時が2023年10月21日 15時であることを示します。

こちらの方法は非常にシンプルで、初めてSwiftで現在時刻を取得する方にはおすすめの方法です。

●Swiftで現在時刻を取得する方法

Swiftを使用して現在の日時を取得する方法は複数あります。

初心者から上級者まで、それぞれのニーズに合わせて適切な方法を選ぶことができます。

ここでは、その中でも特に使用頻度が高いとされる8つの方法を取り上げ、具体的なサンプルコードと共に解説します。

○サンプルコード1:Date()を使用した基本的な取得方法

まず最初に、最も基本的な現在時刻の取得方法をご紹介します。

SwiftのDate()を使用することで、簡単に現在の日時情報を取得できます。

このコードではDate()を使って現在の日時を取得する方法を紹介しています。

この例ではDate()インスタンスを作成し、その結果を表示しています。

let currentDateTime = Date()
print(currentDateTime)

このコードを実行すると、例えば「2023-10-21 15:05:00 +0000」といった形式で現在の日時が出力されます。

ここでの表示はUTC(協定世界時)でのものとなります。

○サンプルコード2:DateFormatterを使用して日付のフォーマットを変更する

次に、取得した日時のフォーマットを変更する方法について見ていきます。

特定の形式で日時を表示したい場合や、より見やすい形式に整えたいときに便利です。

このコードではDateFormatterを使用して、日付のフォーマットを変更する方法を紹介しています。

この例では年-月-日 時:分:秒の形式で日時を取得し、それを表示しています。

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let formattedDate = dateFormatter.string(from: Date())
print(formattedDate)

このコードを実行すると、「2023-10-21 15:05:00」といった形式で現在の日時が表示されます。

DateFormatterを使用することで、様々な日時のフォーマットに対応することが可能です。

○サンプルコード3:Localeを指定して地域別の日付・時刻を表示

SwiftのDateFormatterを使用する際、地域や言語に応じた日付・時刻の表示が求められることがあります。

例えば、日本では「2023年10月21日」、英語圏では「October 21, 2023」といった具体的な表示形式の違いがあります。

このような地域や言語の特性を考慮して、日付・時刻を表示する方法を学びましょう。

このコードではDateFormatterlocaleプロパティを設定することで、指定した地域や言語に応じた日付・時刻の表示をする方法を紹介しています。

この例では、日本語と英語での日付の表示方法を比較しています。

let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
dateFormatter.timeStyle = .none

// 日本の日付表示
dateFormatter.locale = Locale(identifier: "ja_JP")
let japaneseDate = dateFormatter.string(from: Date())
print(japaneseDate) // 2023年10月21日

// 英語の日付表示
dateFormatter.locale = Locale(identifier: "en_US")
let englishDate = dateFormatter.string(from: Date())
print(englishDate) // October 21, 2023

このように、localeプロパティを変更することで簡単に地域や言語に合わせた日付・時刻の表示が可能となります。

Swiftにおいて日付・時刻の表示は非常に多様で、アプリの対象とするユーザーグループに合わせてカスタマイズすることが推奨されます。

○サンプルコード4:TimeZoneを指定して特定のタイムゾーンの時刻を取得

時刻表示においても地域の違いは大きく、特に国際的なアプリケーションの場合、ユーザーが所在する地域のタイムゾーンに応じた正確な時刻表示が求められます。

例として、日本とニューヨークでの時刻の違いを考慮して表示する方法を見ていきましょう。

このコードではDateFormattertimeZoneプロパティを利用して、特定のタイムゾーンに基づく時刻を表示する方法を紹介しています。

この例では、日本時間とニューヨーク時間での現在時刻を取得しています。

let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .none
dateFormatter.timeStyle = .short

// 日本の時刻表示
dateFormatter.timeZone = TimeZone(identifier: "Asia/Tokyo")
let japaneseTime = dateFormatter.string(from: Date())
print(japaneseTime) // 例: 23:05

// ニューヨークの時刻表示
dateFormatter.timeZone = TimeZone(identifier: "America/New_York")
let newYorkTime = dateFormatter.string(from: Date())
print(newYorkTime) // 例: 10:05

タイムゾーンを変更することで、各地域の正確な現在時刻を簡単に取得することができます。

これは特に、国際間での通信やスケジューリングを行うアプリケーションにおいて重要となる機能です。

○サンプルコード5:現在の年、月、日、時間、分、秒を個別に取得する

日付や時刻を取得する際、具体的な要素(年や月、日など)だけを取得したい場面もあります。

Swiftでは、このような要素を簡単に取得するための方法が提供されています。

このコードでは、現在の日時から年、月、日、時間、分、秒を個別に取得する方法を表しています。

この例ではCalendarDateComponentsを使用して、それぞれの要素を抽出しています。

let now = Date()
let calendar = Calendar.current

let year = calendar.component(.year, from: now)
let month = calendar.component(.month, from: now)
let day = calendar.component(.day, from: now)
let hour = calendar.component(.hour, from: now)
let minute = calendar.component(.minute, from: now)
let second = calendar.component(.second, from: now)

print("年: \(year), 月: \(month), 日: \(day), 時: \(hour), 分: \(minute), 秒: \(second)")

このコードを実行すると、現在の年、月、日、時間、分、秒がそれぞれ表示されます。

このような取得方法は、特定の要素をユーザーに提示する場合や、日時をカスタマイズして操作する際に役立ちます。

●Swiftで現在時刻の応用例

現在時刻の取得は、Swiftプログラミングでの基本的な操作の一つです。

しかし、その基本を活用して、さまざまな実用的な機能を実現することができます。

ここでは、Swiftでの現在時刻の取得を応用した様々な例を紹介し、それぞれのサンプルコードとともに具体的な実装方法を解説します。

○サンプルコード6:現在時刻を用いてカウントダウンタイマーを作成

カウントダウンタイマーは、イベントやセール開始の時間までのカウントダウンなど、さまざまな場面で使用されます。

このコードでは、現在時刻と指定した未来の日時との差を計算し、カウントダウンタイマーを表示する方法を表しています。

import Foundation

let now = Date()
let targetDate = Calendar.current.date(byAdding: .hour, value: 3, to: now)!
let interval = targetDate.timeIntervalSince(now)

let hours = Int(interval) / 3600
let minutes = Int(interval) % 3600 / 60
let seconds = Int(interval) % 60

print("残り時間: \(hours)時間 \(minutes)分 \(seconds)秒")

このコードを実行すると、現在から3時間後までの残り時間が「残り時間: 3時間 0分 0秒」として表示されます。

こういったカウントダウンタイマーは、ユーザーに情報を提供するための有効な手段となります。

○サンプルコード7:特定の日時までの残り時間を計算する

特定の日時、例えば新年や誕生日など、重要な日までの残り時間を計算することもSwiftで容易に実現できます。

この例では、指定した日時までの残り時間を計算する方法を表しています。

import Foundation

let now = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
let targetDate = dateFormatter.date(from: "2024/01/01 00:00:00")!
let interval = targetDate.timeIntervalSince(now)

let days = Int(interval) / (3600 * 24)
let hours = Int(interval) % (3600 * 24) / 3600
let minutes = Int(interval) % 3600 / 60
let seconds = Int(interval) % 60

print("残り: \(days)日 \(hours)時間 \(minutes)分 \(seconds)秒")

このコードは、2024年の新年までの残り時間を表すもので、例えば「残り: 70日 5時間 30分 20秒」といった形で表示されます。

○サンプルコード8:過去・未来の日時を現在時刻と比較する

過去の日時や未来の日時と現在時刻との関係を知りたい場面は多々あります。

この例では、指定した日時が現在よりも過去であるのか、未来であるのかを判定する方法を説明しています。

import Foundation

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd HH:mm:ss"

let targetDate1 = dateFormatter.date(from: "2022/01/01 00:00:00")!
let targetDate2 = dateFormatter.date(from: "2024/01/01 00:00:00")!
let now = Date()

if now > targetDate1 {
    print("2022年の新年は過去です。")
} else {
    print("2022年の新年は未来です。")
}

if now > targetDate2 {
    print("2024年の新年は過去です。")
} else {
    print("2024年の新年は未来です。")
}

このコードを実行すると、2022年の新年と2024年の新年が現在時刻と比較して、それぞれ過去の日時なのか、未来の日時なのかを判定して表示します。

これにより、日時の比較が簡単に実現できます。

●注意点と対処法

Swiftで日時を扱う際には、さまざまな注意点が存在します。

正確な時間計算や表示は、アプリケーションの品質に直結するため、これらの注意点を理解し、適切な対処法を取り入れることが重要です。

○タイムゾーンの違いに注意

Swiftで日時を取得や操作を行う際、デフォルトのタイムゾーンが使用されます。

しかし、ユーザーの地域や設定によっては、異なるタイムゾーンを意識する必要があります。

このコードでは、タイムゾーンの違いを考慮して日時を取得する方法を紹介しています。

import Foundation

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
dateFormatter.timeZone = TimeZone(abbreviation: "JST") // 日本標準時を指定

let nowInJST = dateFormatter.string(from: Date())
print("日本標準時での現在時刻: \(nowInJST)")

このコードを利用すると、「日本標準時での現在時刻: 2023/10/21 14:30:00」といった形で、指定したタイムゾーンに基づいた日時を取得できます。

○夏時間の影響を考慮する

一部の国や地域では、夏時間が採用されています。

夏時間の期間中は、標準時から1時間進められるため、この影響を考慮しないと誤った時間情報を表示する可能性があります。

import Foundation

let calendar = Calendar.current
if calendar.isDateInDST(Date()) {
    print("現在は夏時間です")
} else {
    print("現在は夏時間ではありません")
}

このコードを実行すると、夏時間の適用されている期間中は「現在は夏時間です」と表示され、それ以外の期間では「現在は夏時間ではありません」と表示されます。

○日付と時刻のフォーマットの違いを理解する

日付や時刻の表示フォーマットは、国や地域によって異なります。

例えば、日本では「年/月/日」の順で日付を表示するのが一般的ですが、アメリカでは「月/日/年」の順となります。

ユーザーの期待に応えるためには、適切なフォーマットを選択する必要があります。

import Foundation

let usDateFormatter = DateFormatter()
usDateFormatter.dateFormat = "MM/dd/yyyy"
let jpDateFormatter = DateFormatter()
jpDateFormatter.dateFormat = "yyyy/MM/dd"

let now = Date()
print("アメリカ式の日付フォーマット: \(usDateFormatter.string(from: now))")
print("日本式の日付フォーマット: \(jpDateFormatter.string(from: now))")

このコードを利用すると、現在の日付を「アメリカ式の日付フォーマット: 10/21/2023」と「日本式の日付フォーマット: 2023/10/21」としてそれぞれ表示することができます。

これらの注意点を理解し、Swiftでの日時操作を行う際には適切な対処を行うことで、ユーザーにとって使いやすく、正確なアプリケーションを開発することができます。

●カスタマイズ方法

Swiftを使用して現在時刻を取得する際に、さらなるカスタマイズが求められるケースは少なくありません。

例えば、特定の形式での出力や、独自の日付計算など、ニーズに合わせたカスタマイズが必要です。

ここでは、Swiftでの現在時刻取得をカスタマイズする際の主要な方法をいくつか紹介します。

○指定した曜日の日付を取得する

ユーザーから「次の金曜日は何日か?」といった質問を受ける場面は多いです。

このコードでは、指定した曜日の日付を取得する方法を紹介しています。

import Foundation

func next(weekday: Int) -> Date? {
    let calendar = Calendar.current
    if let nextDate = calendar.nextDate(after: Date(), matching: .init(weekday: weekday), matchingPolicy: .nextTime) {
        return nextDate
    }
    return nil
}

if let nextFriday = next(weekday: 6) {
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy/MM/dd"
    print("次の金曜日は \(formatter.string(from: nextFriday)) です。")
}

この例では、次の金曜日の日付を取得しています。実行すると、「次の金曜日は 2023/10/27 です。」という出力結果が得られます。

○特定の形式で日時を取得する

日時の出力形式をユーザーの要望に合わせてカスタマイズしたい場合は、DateFormatterを使用して出力形式を指定します。

このコードでは、”日時: 2023年10月21日 15時30分”のような形式で現在時刻を出力しています。

import Foundation

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "日時: yyyy年MM月dd日 HH時mm分"
let customizedDate = dateFormatter.string(from: Date())
print(customizedDate)

上記のコードを利用すると、「日時: 2023年10月21日 15時30分」という出力結果が得られます。

○期間を指定して日数を計算する

特定の期間内での日数を計算したい場面もあります。

このコードでは、指定した日付間の日数を計算する方法を紹介しています。

import Foundation

let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd"
if let startDate = formatter.date(from: "2023/10/01"), let endDate = formatter.date(from: "2023/10/21") {
    let daysBetween = Calendar.current.dateComponents([.day], from: startDate, to: endDate).day!
    print("指定した期間内の日数は \(daysBetween) 日です。")
}

このコードを実行すると、「指定した期間内の日数は 20 日です。」という出力結果が得られます。

まとめ

Swiftを活用した現在時刻の取得方法は多岐にわたります。

初心者から上級者まで、様々なシチュエーションでの日時操作が求められることが多いため、この記事を通して提供された情報とサンプルコードは非常に価値があります。

基本的な取得方法から、カスタマイズや応用例、注意点まで幅広く紹介しました。

特に、Date、DateFormatter、Calendarなどのクラスやメソッドの活用方法を学ぶことで、多様な日時操作がスムーズに実行できるようになります。

カスタマイズ方法を駆使することで、ユーザーの具体的な要望やアプリケーションの仕様に応じた日時の取得・表示が可能です。

この記事を参考に、Swiftでの日時操作の基本をしっかりとマスターし、より高度なカスタマイズや応用を追求してください。

日時の操作は多くのアプリケーションで必要とされる機能であるため、これらの知識と技術を身につけることは、Swiftプログラマーとしてのスキルアップに繋がります。