Swiftで曜日を取得するたった12の方法

Swiftを使用した曜日取得のイラスト付きガイドSwift
この記事は約16分で読めます。

 

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

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

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

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

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

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

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

はじめに

SwiftはAppleが開発したプログラム言語で、特にiOSやmacOSなどのアプリケーション開発でよく使用されます。

日常生活でスマートフォンを使用している多くの方が、Swiftで書かれたアプリケーションに触れていることでしょう。

そんなSwiftで、現在の日付や指定された日付から曜日を取得する方法が知りたいという方も多いはずです。

この記事を読めば、Swiftを使用して日付から曜日を取得する方法を簡単に学ぶことができます。

実際のサンプルコードを交えながら、初心者の方でもわかりやすく、Swiftでの曜日取得の方法を徹底解説していきます。

●Swiftとは

Swiftは、Appleが2014年に発表した比較的新しいプログラミング言語です。

Objective-Cの後継として考案され、現代のプログラム言語としての多くの特徴や利点を持っています。

○Swiftの基本的な特徴

  • 高速:最適化されたコンパイラにより、CやObjective-Cと比較しても高速な実行が可能です。
  • 安全性:変数がnilを持つかどうかを明示的に示すオプショナル型など、エラーを起こしにくい設計が取り入れられています。
  • 直感的:シンタックスがシンプルで読みやすく、初心者にも親しみやすい言語設計となっています。
  • 強力なIDE:Xcodeという統合開発環境を使って開発することで、コードの補完やデバッグなどが容易に行えます。

Swiftはこれらの特徴を持ちながらも、進化し続ける言語です。

そのため、常に最新の情報や技術を追いかけることが求められます。

●Swiftでの日付と曜日の取得

日常的にアプリを使用していると、日付や曜日の情報がどこかで必要になることがよくあります。

例えば、カレンダーアプリや予定管理ツール、天気予報アプリなど、多くの場面で日付や曜日を取得する処理が求められます。

Swiftでは、このような日付や曜日の情報を取得するためのクラスやメソッドが提供されています。

ここでは、Swiftで日付や曜日を取得する基本的な方法を学びます。

○Dateクラスの紹介

Swiftで日付や時刻を取り扱う際の中心的な役割を果たすのがDateクラスです。

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

このコードではDateクラスを使って現在の日付と時刻を取得するコードを紹介しています。

この例ではDateのインスタンスを作成して、現在の日付と時刻を取得しています。

let now = Date()
print(now)

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

例えば、「2023-10-18 15:00:00 +0900」のような形式で出力されるでしょう。

○Calendarクラスの利用方法

曜日や月、年といった日付の詳細情報を取得する際にはCalendarクラスを利用します。

Calendarクラスは、日付の計算や各種の日付情報を取得するためのメソッドを提供しています。

このコードではCalendarクラスを使って、特定の日付の曜日を取得する方法を紹介しています。

この例では現在の日付から曜日の情報を取得しています。

let calendar = Calendar.current
if let weekday = calendar.dateComponents([.weekday], from: now).weekday {
    print("曜日の数字: \(weekday)")
}

このコードを実行すると、曜日の情報が数字で出力されます。

数字は日曜日を1、月曜日を2として、土曜日までの7までの数字で表示されるので、例えば「曜日の数字: 3」と表示されれば、それは火曜日を表しています。

●Swiftで曜日を取得する方法

Swiftを使用して日付や曜日を取得する際、多くの場面で曜日の情報が特に重要です。

例えば、週の始まりや終わりを識別する際、特定の曜日に実行するタスクのスケジューリングなど、アプリケーション開発のさまざまな場面で曜日の情報が必要になることがあります。

ここでは、Swiftで曜日を取得する3つの基本的な方法を解説します。

○サンプルコード1:現在の曜日を取得する

最初に、現在の曜日を取得する方法を紹介します。

このコードではCalendarクラスを使って、現在の日付の曜日を取得しています。

let calendar = Calendar.current
let now = Date()
if let weekday = calendar.dateComponents([.weekday], from: now).weekday {
    print("今日の曜日の数字: \(weekday)")
}

上記のコードを実行すると、今日の曜日が数字で表示されます。

数字は1が日曜日、2が月曜日とし、7が土曜日となります。

○サンプルコード2:指定した日付の曜日を取得する

次に、指定した日付の曜日を取得する方法を紹介します。

この例では、2023年10月18日の曜日を取得しています。

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd"
if let specificDate = dateFormatter.date(from: "2023/10/18") {
    if let weekday = calendar.dateComponents([.weekday], from: specificDate).weekday {
        print("2023年10月18日の曜日の数字: \(weekday)")
    }
}

このコードを実行すると、「2023年10月18日の曜日の数字: 4」と表示され、それは水曜日を表しています。

○サンプルコード3:日付の文字列から曜日を取得する

最後に、日付の文字列から曜日を直接取得する方法を紹介します。

この例では、日付の文字列「2023-10-18」から曜日を取得しています。

if let specificDate = dateFormatter.date(from: "2023-10-18") {
    if let weekday = calendar.dateComponents([.weekday], from: specificDate).weekday {
        print("2023-10-18の曜日の数字: \(weekday)")
    }
}

このコードの実行結果も、「2023-10-18の曜日の数字: 4」として、水曜日が表されます。

●応用:さまざまなフォーマットで曜日を表示

Swiftを使用して曜日を取得する際、曜日を表示するさまざまなフォーマットがあります。

通常の数字や日本語の曜日名だけでなく、英語の曜日名や曜日の先頭3文字だけの短縮形など、状況や要件に応じて変更することができます。

○サンプルコード4:英語の曜日名で表示する

まずは、日付から英語の曜日名を取得する方法を紹介します。

このコードではDateFormatterを使って、曜日を英語のフルネームで取得しています。

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE"
let now = Date()
let englishWeekday = dateFormatter.string(from: now)
print("今日の英語の曜日名: \(englishWeekday)")

上記のコードを実行すると、例えば「今日の英語の曜日名: Wednesday」という形で、今日の曜日が英語のフルネームで表示されます。

○サンプルコード5:曜日を数字で取得する

次に、日付から曜日を数字で取得する方法を紹介します。

先ほどの方法とは異なり、この方法ではCalendarクラスを使って数字で曜日を取得します。

let calendar = Calendar.current
if let weekdayNumber = calendar.dateComponents([.weekday], from: now).weekday {
    print("今日の曜日の数字: \(weekdayNumber)")
}

このコードを実行すると、「今日の曜日の数字: 4」と表示され、それは水曜日を表しています。

○サンプルコード6:曜日の先頭3文字で取得する

最後に、日付から曜日の先頭3文字だけを取得する方法を紹介します。

この方法もDateFormatterを使用しています。

dateFormatter.dateFormat = "EEE"
let shortWeekday = dateFormatter.string(from: now)
print("今日の曜日の先頭3文字: \(shortWeekday)")

このコードを実行すると、「今日の曜日の先頭3文字: Wed」という形で、今日の曜日が先頭3文字で表示されます。

●Swiftの曜日取得の注意点と対処法

Swiftで日付や曜日を取得する際には、いくつかの注意点が存在します。

これらの問題を理解し、適切に対処することで、期待通りの結果を得ることができます。

ここでは、主要な問題点とその対処法を詳細に解説します。

○タイムゾーンの問題

世界中で使用されるアプリケーションの場合、ユーザーの位置に応じてタイムゾーンが異なることが考えられます。

そのため、タイムゾーンを考慮しないで曜日を取得すると、意図しない結果になることがあります。

このコードではTimeZoneを使用して、指定したタイムゾーンでの曜日を取得しています。

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE"
dateFormatter.timeZone = TimeZone(identifier: "Asia/Tokyo")
let tokyoWeekday = dateFormatter.string(from: Date())
print("東京の曜日: \(tokyoWeekday)")

実行すると、指定したタイムゾーン「Asia/Tokyo」に基づいた曜日が表示されます。

アプリケーションの要件に応じて、適切なタイムゾーンを指定することで、問題を回避できます。

○日付のフォーマット問題

日付の文字列をDateオブジェクトに変換する際、フォーマットが正確でないと変換に失敗することがあります。

このコードでは、正しいフォーマットを使用して日付の文字列からDateオブジェクトを生成する方法を紹介しています。

dateFormatter.dateFormat = "yyyy/MM/dd"
if let convertedDate = dateFormatter.date(from: "2023/10/18") {
    let weekday = dateFormatter.string(from: convertedDate)
    print("指定した日付の曜日: \(weekday)")
}

このコードを実行すると、「指定した日付の曜日: Wednesday」という形で、指定した日付の曜日が表示されます。

日付の文字列を変換する際は、フォーマットを正確に指定することが重要です。

○非常に過去や未来の日付の取り扱い

非常に過去や未来の日付を扱う際には、計算上の誤差やシステムの制約により、期待通りの結果が得られないことがあります。

例えば、西暦1年や西暦9999年などの極端な年数は、取り扱いに注意が必要です。

具体的な対処法としては、アプリケーションの要件に応じて取り扱える日付の範囲を明確に定義し、その範囲外の日付が入力された場合はエラーメッセージを表示するなどの対応を行うと良いでしょう。

●カスタマイズ:曜日取得をもっと便利にする方法

Swiftを使用して曜日を取得する基本的な方法について理解したところで、次はその方法をカスタマイズして、より便利に使うためのテクニックをいくつか紹介します。

これらのカスタマイズ方法を組み合わせることで、あなたのアプリケーションのユーザーエクスペリエンスを向上させることができます。

○サンプルコード7:曜日のカラーコード化

曜日に応じて異なる色を割り当て、視覚的に分かりやすくする方法を考えます。

このコードでは、曜日を取得し、それに応じて色のカラーコードを返す関数を紹介しています。

import UIKit

func colorForWeekday(weekday: Int) -> UIColor {
    switch weekday {
    case 1: return UIColor.red  // 日曜日は赤
    case 2...6: return UIColor.black  // 月曜日から金曜日は黒
    case 7: return UIColor.blue  // 土曜日は青
    default: return UIColor.gray  // それ以外の値は灰色
    }
}

let today = Calendar.current.component(.weekday, from: Date())
let color = colorForWeekday(weekday: today)

このコードを利用すると、現在の曜日に基づいてUIColorオブジェクトが取得でき、これをテキストや背景色などに適用することができます。

○サンプルコード8:曜日ごとのアクションを実行する

アプリケーションで曜日に応じて異なるアクションを実行する場面も考えられます。

この例では、曜日に応じてメッセージを出力するシンプルな関数を紹介しています。

func actionForWeekday(weekday: Int) {
    switch weekday {
    case 1: print("日曜日のアクションを実行")
    case 2: print("月曜日のアクションを実行")
    case 3: print("火曜日のアクションを実行")
    // ... 以降、他の曜日のアクションも追加
    default: print("指定されたアクションは存在しません")
    }
}

let currentWeekday = Calendar.current.component(.weekday, from: Date())
actionForWeekday(weekday: currentWeekday)

上記を実行すると、現在の曜日に対応するメッセージが出力されます。

○サンプルコード9:曜日に応じたイベント処理

曜日に応じて特定のイベントをトリガーする処理も一般的です。

この例では、曜日に応じて特定のタスクを実行する関数を示します。

func eventForWeekday(weekday: Int) {
    if weekday == 6 {
        print("金曜日だ! 週末の準備をしよう")
    } else {
        print("今日のタスクを実行")
    }
}

let todayWeekday = Calendar.current.component(.weekday, from: Date())
eventForWeekday(weekday: todayWeekday)

このコードを使用すると、金曜日には「金曜日だ! 週末の準備をしよう」というメッセージが、それ以外の曜日には「今日のタスクを実行」というメッセージが出力されます。

●Swiftの曜日取得を活用したプロジェクト例

Swiftで曜日を取得する技術をマスターすることで、さまざまなアプリケーションやシステムに応用することができます。

ここでは、実際のプロジェクト例として、曜日取得を活用した3つの具体的なシナリオを紹介します。

○サンプルコード10:曜日ごとのタスク管理アプリ

タスク管理アプリでは、曜日ごとに特定のタスクを設定する機能が役立つでしょう。

下記のコードは、曜日ごとのタスクリストを取得するシンプルな例を表しています。

struct Task {
    let name: String
    let day: Int
}

let tasks: [Task] = [
    Task(name: "運動する", day: 1),
    Task(name: "読書する", day: 3),
    // ... 他のタスクも追加
]

func tasksForDay(day: Int) -> [Task] {
    return tasks.filter { $0.day == day }
}

let todayTasks = tasksForDay(day: Calendar.current.component(.weekday, from: Date()))
for task in todayTasks {
    print(task.name)
}

このコードを利用すると、今日の曜日に設定されているタスクのリストを取得できます。

○サンプルコード11:曜日に応じた通知システム

曜日に応じて異なる通知をユーザーに送信するシステムも考えられます。

下記の例では、曜日ごとの通知メッセージを取得する方法を表しています。

struct NotificationMessage {
    let message: String
    let day: Int
}

let messages: [NotificationMessage] = [
    NotificationMessage(message: "今週の予定を確認しましょう", day: 1),
    NotificationMessage(message: "水曜日のイベントを忘れずに", day: 3),
    // ... 他のメッセージも追加
]

func notificationForDay(day: Int) -> NotificationMessage? {
    return messages.first { $0.day == day }
}

if let message = notificationForDay(day: Calendar.current.component(.weekday, from: Date())) {
    print(message.message)
}

このコードを使用すると、今日の曜日に対応する通知メッセージを取得することができます。

○サンプルコード12:曜日毎のスケジュール表示

スケジュール管理アプリやカレンダーアプリでは、曜日ごとのスケジュール表示が欠かせません。

下記の例では、曜日ごとのスケジュールリストを取得する方法を表しています。

struct Schedule {
    let event: String
    let day: Int
}

let schedules: [Schedule] = [
    Schedule(event: "チームミーティング", day: 2),
    Schedule(event: "外部のイベント", day: 5),
    // ... 他のスケジュールも追加
]

func scheduleForDay(day: Int) -> [Schedule] {
    return schedules.filter { $0.day == day }
}

let todaySchedules = scheduleForDay(day: Calendar.current.component(.weekday, from: Date()))
for schedule in todaySchedules {
    print(schedule.event)
}

このコードを使って、今日の曜日に予定されているスケジュールのリストを取得できます。

まとめ

Swiftで曜日を取得する技術は、日常のアプリケーションやシステム開発において極めて便利な機能となります。

本ガイドを通じて、Swiftの基本的な曜日取得方法から、それを活用したプロジェクトの例まで、幅広く学ぶことができたかと思います。

特に、SwiftのDateクラスやCalendarクラスを効果的に利用することで、現在の日付や指定した日付からの曜日取得が容易になること、またタイムゾーンや日付のフォーマットの問題に対応する方法を理解することが重要です。

さらに、曜日取得を活用したカスタマイズやプロジェクトの応用例を紹介することで、実際の開発シーンでの活用方法についてのインスピレーションを得ることができました。

Swiftでの曜日取得は、単純な機能のように思えるかもしれませんが、これを基に多彩なアプリケーションや機能を開発することが可能です。

日常の開発においても、この知識を活かして効果的にアプリケーションを構築していくことをおすすめします。