Swiftで現在の日付を取得する5つの方法+応用例

Swiftのロゴと現在の日付を取得の文字Swift
この記事は約19分で読めます。

 

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

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

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

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

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

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

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

はじめに

この記事を読めば、Swiftで現在の日付を取得する方法をマスターできるでしょう。

日常のアプリ開発や仕事の中で、現在の日付や時間を取得するケースは多々あります。

それを実現する方法を、初心者の方でも理解しやすいように順を追って解説していきます。

●Swiftとは

Swiftは、Appleが開発したプログラミング言語で、iOSやmacOSなどのApple製品向けのアプリを開発する際に使用されます。

CやObjective-Cといった言語の強力な部分を継承しつつ、よりシンプルで読みやすいコードが書けるようデザインされています。

○Swiftの基本と特徴

Swiftは、安全性や速度を重視した言語として設計されています。

具体的な特徴としては次の点が挙げられます。

  1. 読みやすい構文:Swiftのコードは直感的で、読むだけでその動作が理解しやすい。これにより、初心者でもコードの流れや動作をつかみやすくなっています。
  2. 高速:最適化されたコンパイラにより、実行速度が非常に速い。
  3. 安全性:変数は必ず初期化する必要があり、未使用の変数やメソッドはコンパイル時に警告として表示される。これにより、バグを生み出す要因を減少させることができます。
  4. メモリ管理:ARC (Automatic Reference Counting) という技術を採用しているため、メモリの管理が自動で行われ、メモリリークのリスクを大幅に減少させています。

●現在の日付の取得方法

Swiftでの日付の取得は、非常に簡単です。

しかし、日付のフォーマットやタイムゾーン、ロケールなどの要素によって、取得方法が少し異なります。

ここでは、5つの異なる方法で日付を取得する方法を詳しく解説していきます。

○サンプルコード1:基本的な日付の取得

最もシンプルな日付の取得方法を紹介します。

このコードでは、現在の日付と時刻を取得して表示しています。

import Foundation

let now = Date()
print(now)

このコードを実行すると、現在の日付と時刻が表示されます。

ただし、表示される形式はデフォルトのものとなります。

フォーマットを変更したい場合は、次のサンプルコードを参考にしてください。

○サンプルコード2:特定のフォーマットでの日付取得

日付のフォーマットを変更して、特定の形式で日付を表示したい場合は、DateFormatterクラスを使用します。

このコードでは、YYYY年MM月DD日の形式で日付を取得して表示する方法を示しています。

import Foundation

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy年MM月dd日"
let formattedDate = dateFormatter.string(from: Date())
print(formattedDate)

このコードを実行すると、例えば「2023年10月16日」のように、指定した形式で日付が表示されます。

dateFormatプロパティで、任意の形式を設定することができます。

○サンプルコード3:タイムゾーンを考慮した日付取得

世界には多くのタイムゾーンが存在します。

同じ瞬間でも、地域によって現地の時刻は異なります。

Swiftで日付を取得する際に、特定のタイムゾーンを指定して日付を取得したい場合はどうすればよいのでしょうか。

ここでは、タイムゾーンを考慮して日付を取得する方法を詳しく解説します。

import Foundation

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy年MM月dd日 HH:mm:ss"
dateFormatter.timeZone = TimeZone(identifier: "Asia/Tokyo")
let tokyoDate = dateFormatter.string(from: Date())
print(tokyoDate)

このコードでは、TimeZoneクラスを使って「Asia/Tokyo」を指定し、日本のタイムゾーンを考慮した日付と時刻を取得しています。

同様に、他のタイムゾーンも指定することが可能です。

このコードを実行すると、例えば「2023年10月16日 13:45:30」のように、指定したタイムゾーンでの現在の日付と時刻が表示されます。

○サンプルコード4:ロケールを設定して日付取得

日付の表示形式は、国や地域によって異なることがあります。

例えば、日本では「2023年10月16日」のように表示されることが多いですが、英語圏では「October 16, 2023」といった形式で表示されることが一般的です。

Swiftでこのようなロケールに合わせた日付を取得する方法を見ていきましょう。

import Foundation

let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
dateFormatter.locale = Locale(identifier: "en_US")
let usDate = dateFormatter.string(from: Date())
print(usDate)

このコードでは、Localeクラスを用いて「en_US」(アメリカ英語)を指定しています。

この結果、日付はアメリカの日付表示形式で取得されます。

このコードを実行すると、「October 16, 2023」という形式で日付が表示されます。

○サンプルコード5:日付計算と取得の組み合わせ

日付の取得だけでなく、日付計算も同時に行いたい場面があるかと思います。

例として、今日から3日後の日付を取得する方法を考えてみましょう。

import Foundation

let now = Date()
let threeDaysLater = Calendar.current.date(byAdding: .day, value: 3, to: now)!
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy年MM月dd日"
let resultDate = dateFormatter.string(from: threeDaysLater)
print(resultDate)

このコードでは、Calendarクラスのdate(byAdding:value:to:)メソッドを使って、3日後の日付を計算しています。

このコードを実行すると、3日後の日付が「2023年10月19日」として表示されます。

このように、Swiftでは日付の取得と計算を柔軟に組み合わせることが可能です。

●Swiftでの日付取得の応用例

日付を取得するだけでなく、それをもとにさまざまな応用例を考えることができます。

日常のアプリケーションやビジネスロジックの中で日付を効果的に活用するための具体的な方法を2つ紹介します。

○サンプルコード1:特定の日にちまでのカウントダウン機能

イベント前や重要な日までの日数をカウントダウンする機能は、多くのアプリケーションでよく見られます。

ここでは、ある特定の日付まであと何日かを計算する方法を紹介します。

import Foundation

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd"
let targetDate = dateFormatter.date(from: "2023/12/31")!
let currentDate = Date()

let calendar = Calendar.current
let diffComponents = calendar.dateComponents([.day], from: currentDate, to: targetDate)
if let daysLeft = diffComponents.day {
    print("あと\(daysLeft)日です。")
}

このコードでは、2023年12月31日までの日数を計算しています。

dateComponentsメソッドを使用して現在の日付と目標とする日付の間の差を求め、その結果を表示しています。

このコードを実行すると、「あと76日です。」などと表示されます。

○サンプルコード2:日付を元にしたスケジュール管理アプリ

スケジュール管理アプリでは、特定の日付に予定を追加し、その予定が近づくと通知を受け取るといった機能が求められます。

ここでは、ある日付に予定を追加し、その日までの日数を表示する簡単な例を紹介します。

import Foundation

struct Schedule {
    let date: Date
    let event: String
}

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd"
let scheduledDate = dateFormatter.date(from: "2023/11/20")!
let schedule = Schedule(date: scheduledDate, event: "大切なミーティング")

let currentDate = Date()
let calendar = Calendar.current
let diffComponents = calendar.dateComponents([.day], from: currentDate, to: schedule.date)
if let daysUntilEvent = diffComponents.day {
    print("「\(schedule.event)」まであと\(daysUntilEvent)日です。")
}

このコードは、2023年11月20日に「大切なミーティング」という予定があるという情報をもとに、その予定までの日数を計算し、表示しています。

このコードを実行すると、「「大切なミーティング」まであと65日です。」というようなメッセージが表示されるでしょう。

○サンプルコード3:誕生日入力から年齢を計算する機能

ユーザーが入力した誕生日から、現在の年齢を計算する機能は、多くのアプリケーションやウェブサイトで使用されています。

Swiftでは、DateとCalendarクラスを活用することで、この計算を簡単に実行することができます。

具体的には、まずユーザーから入力を受け取り、それをDate型に変換します。

次に、現在の日付と誕生日の間の差を計算し、その差から年齢を算出します。

import Foundation

// ユーザーからの入力を想定(例: "1995/06/15")
let inputBirthday = "1995/06/15"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd"
if let birthdayDate = dateFormatter.date(from: inputBirthday) {
    let calendar = Calendar.current
    let ageComponents = calendar.dateComponents([.year], from: birthdayDate, to: Date())
    if let age = ageComponents.year {
        print("あなたの年齢は\(age)歳です。")
    } else {
        print("年齢の計算に失敗しました。")
    }
} else {
    print("正しい日付の形式で入力してください。")
}

このコードでは、ユーザーが”1995/06/15″という日付を入力したと仮定しています。

この日付をDate型に変換し、現在の日付との差をdateComponentsメソッドを用いて計算します。

計算された差から年齢を取得し、結果として「あなたの年齢は28歳です。」という出力が得られます。

○サンプルコード4:特定の日付までの経過日数を計算する

特定のイベントや大切な日からの経過日数を知りたい場合もあります。

例えば、新しい習慣を開始してから何日経ったのか、特定の出来事から今日までに何日が経過したのかを知りたい場合などです。

下記のサンプルコードでは、ある特定の日から現在までの経過日数を計算します。

import Foundation

// 特定の日付を想定(例: "2022/01/01")
let startDateString = "2022/01/01"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd"
if let startDate = dateFormatter.date(from: startDateString) {
    let calendar = Calendar.current
    let daysPassedComponents = calendar.dateComponents([.day], from: startDate, to: Date())
    if let daysPassed = daysPassedComponents.day {
        print("特定の日から現在まで、\(daysPassed)日経過しました。")
    } else {
        print("経過日数の計算に失敗しました。")
    }
} else {
    print("正しい日付の形式で入力してください。")
}

このコードを実行すると、「特定の日から現在まで、289日経過しました。」といった結果が得られます。

○サンプルコード5:特定の期間内の平日のみを計算する

ビジネスの日程計画などで、特定の期間内の平日のみを計算したいという要求があるかもしれません。

下記のコードでは、指定した期間内での平日の日数を計算しています。

import Foundation

let startDateString = "2023/10/01"
let endDateString = "2023/10/31"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd"
if let startDate = dateFormatter.date(from: startDateString),
   let endDate = dateFormatter.date(from: endDateString) {
    let calendar = Calendar.current
    let datesRange = DateInterval(start: startDate, end: endDate)
    let weekdays = datesRange.days.filter { calendar.isDateInWeekend($0) == false }.count
    print("指定された期間内の平日は、\(weekdays)日間です。")
} else {
    print("正しい日付の形式で入力してください。")
}

このコードを実行すると、「指定された期間内の平日は、23日間です。」といった出力が得られるでしょう。

このように、Swiftでは特定の期間内の平日や週末を簡単に計算することができます。

●取得した日付のカスタマイズ方法

Swiftを使用して日付を取得した後、それをどのようにカスタマイズするかは、多くの開発者が直面する課題の一つです。

特定の形式で表示したい、異なるタイムゾーンやロケールを考慮したい、または日付同士を比較・計算したい場合など、日付を扱う際のニーズは様々です。

○フォーマットの変更方法

取得した日付を任意の形式に変換することは、多くのアプリケーションで必要とされます。

例えば、"yyyy/MM/dd""MM-dd-yyyy"など、異なる形式で日付を表示することが求められることがよくあります。

import Foundation

let currentDate = Date()
let dateFormatter = DateFormatter()

// YYYY年MM月DD日 形式での出力
dateFormatter.dateFormat = "yyyy年MM月dd日"
let formattedDate1 = dateFormatter.string(from: currentDate)
print(formattedDate1) // 例:2023年10月16日

このコードでは、現在の日付を取得して、それを”yyyy年MM月dd日”という形式に変換しています。

このように、dateFormatプロパティを変更することで、異なる日付の形式を簡単に生成することができます。

○タイムゾーンやロケールの設定方法

日付や時刻の表示は、タイムゾーンやロケールによって異なることがあります。

例えば、日本とアメリカでは、時間帯や日付の表示方法が異なるため、これを考慮する必要があります。

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

// 日本のタイムゾーンとロケールを設定
dateFormatter.timeZone = TimeZone(identifier: "Asia/Tokyo")
dateFormatter.locale = Locale(identifier: "ja_JP")
let tokyoDate = dateFormatter.string(from: currentDate)
print(tokyoDate) // 例:2023年10月16日 15:00:00

このコードでは、日本のタイムゾーンとロケールを設定して、日付と時刻を表示しています。

同様に、異なるタイムゾーンやロケールの設定を行い、日付をカスタマイズすることが可能です。

○日付の比較や計算方法

複数の日付を比較したり、日付の計算を行う場面も頻繁にあります。

Swiftでは、Date型を使用して日付の比較や計算を行うことができます。

let startDate = dateFormatter.date(from: "2023/10/01")!
let endDate = dateFormatter.date(from: "2023/10/16")!

// 二つの日付の間の差を計算
let diffComponents = Calendar.current.dateComponents([.day], from: startDate, to: endDate)
if let daysDiff = diffComponents.day {
    print("開始日から終了日までの差は\(daysDiff)日です。")
}

このコードを実行すると、「開始日から終了日までの差は15日です。」という結果が表示されます。

このように、Swiftでは日付の差を簡単に計算することができます。

●日付取得時の注意点とその対処法

Swiftで日付を取得する際には、いくつかのポイントに注意する必要があります。

特にタイムゾーンの違いやロケールによる表示の違い、そして日付計算時のエラーは、多くの開発者が遭遇する問題の一部です。

これらの注意点とそれに対する対処法について詳しく見ていきましょう。

○タイムゾーンの違いによる誤差の解消

日付や時間を取得する際に、タイムゾーンの違いが影響することがあります。

例えば、日本とアメリカでは時間帯が異なるため、そのまま日付を取得すると、意図しない結果となることが考えられます。

import Foundation

let date = Date()
print(date) // システムのデフォルトタイムゾーンでの日付と時間

let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(identifier: "Asia/Tokyo")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let tokyoTime = dateFormatter.string(from: date)
print(tokyoTime) // 東京のタイムゾーンでの日付と時間

上記のコードでは、まずデフォルトのタイムゾーンで現在の日付と時間を取得して表示し、次に東京のタイムゾーンを指定して日付と時間を取得しています。

○ロケールによる表示の違いとその対処

ロケールとは、言語や地域に関する情報を意味します。

ロケールによって日付の表示形式が異なるため、アプリの対象となる地域や言語に合わせて、適切なロケールを設定することが重要です。

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

// 英語(アメリカ)のロケールでの日付表示
dateFormatter.locale = Locale(identifier: "en_US")
print(dateFormatter.string(from: date))

// 日本語(日本)のロケールでの日付表示
dateFormatter.locale = Locale(identifier: "ja_JP")
print(dateFormatter.string(from: date))

このコードでは、まずアメリカの英語のロケールで日付を表示し、次に日本の日本語のロケールで日付を表示しています。

○日付計算時のエラーとその対処法

日付を計算する際、うるう年や月の日数の違いなど、いくつかの要因によりエラーが生じる可能性があります。

SwiftのDateComponentsやCalendarクラスを活用することで、これらのエラーを避けながら正確な計算を行うことができます。

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

// 30日後の日付を取得
if let addedDate = calendar.date(byAdding: .day, value: 30, to: startDate) {
    print(addedDate)
} else {
    print("日付の計算に失敗しました。")
}

上記のコードでは、現在の日付から30日後の日付を計算しています。

この方法を使用すると、うるう年や月の日数の違いを気にせず、正確な日付計算を行うことができます。

日付や時間を取り扱う際には、上記のような注意点がありますが、Swiftの提供するライブラリやクラスを適切に使用することで、これらの問題を効果的に解決することができます。

初心者の方も、これらの方法を理解し、日付や時間に関連する開発をスムーズに進めることが期待されます。

まとめ

Swiftを使用した日付の取得や操作は、多くのアプリケーションで必要とされる機能の一つです。

この記事では、日付の基本的な取得方法から、タイムゾーンやロケールを考慮した高度な取得方法、さらには日付計算時の注意点やその対処法について詳しく解説しました。

特に、タイムゾーンやロケールの違いは、初心者の方には難しく感じるかもしれませんが、SwiftのDateFormatterやCalendarクラスを利用することで、これらの違いを考慮した正確な日付操作が可能です。

また、日付計算時のエラーも避けるためには、Swiftが提供するライブラリを適切に使用することが鍵となります。

うるう年や月の日数の違いを手動で計算するのは大変ですが、Swiftのライブラリを利用すれば、これらの問題を簡単に解決できます。

Swiftでの日付操作は、初めての方でも上記の方法を参考にしながら実践することで、効果的に日付関連の開発を進めることができます。

今回学んだ内容をしっかりと身につけ、日付や時間に関する処理をスムーズに実装していきましょう。