0Pricing
Swift Academy · レッスン

CalendarとDateComponents

カレンダーをまたいだ日付計算を行います。

「CalendarとDateComponents」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

CalendarとDateComponents

CalendarはDateを年、月、日などの人間が扱う単位として解釈します。DateComponentsは、分解したこれらの値を保持します。

現在のカレンダー

Calendar.currentはユーザーの設定を反映します。これは、生のDateの時点と名前付きの各フィールドをつなぐ窓口です。

import Foundation

let cal = Calendar.current
print("Calendar identifier: \(cal.identifier)")

コンポーネントの取り出し

dateComponents(_:from:)は、日付から指定したフィールドを取り出し、DateComponentsの値に格納します。

import Foundation

let cal = Calendar.current
let comps = cal.dateComponents([.year, .month, .day], from: Date())
print("Year is set: \(comps.year != nil)")

単一フィールドの読み取り

component(_:from:)を使うと、1つのフィールドをIntとして直接取得できます。

import Foundation

let cal = Calendar.current
let weekday = cal.component(.weekday, from: Date())
print("Weekday number between 1 and 7: \(1...7 ~= weekday)")

コンポーネントからの日付の構築

DateComponentsに値を設定し、date(from:)でカレンダーに対応するDateを生成させます。

import Foundation

var comps = DateComponents()
comps.year = 2024
comps.month = 12
comps.day = 25
let cal = Calendar.current
if let date = cal.date(from: comps) {
    print("Built a date: \(date.timeIntervalSince1970 > 0)")
}

日付の計算

date(byAdding:to:)は、月の日数やうるう年を自動的に処理しながら、指定したコンポーネントの値を安全に加算します。

import Foundation

let cal = Calendar.current
let now = Date()
if let nextWeek = cal.date(byAdding: .day, value: 7, to: now) {
    print(nextWeek > now)
}

複数単位の加算

加算する差分を表すDateComponentsを渡すことで、複数の単位を一度に加算できます。

import Foundation

let cal = Calendar.current
var offset = DateComponents()
offset.month = 1
offset.day = 3
if let future = cal.date(byAdding: offset, to: Date()) {
    print(future > Date())
}

日付間の差分

逆の処理として、dateComponents(_:from:to:)は2つの日付の間に経過した単位を返します。

import Foundation

let cal = Calendar.current
let now = Date()
let later = now.addingTimeInterval(3 * 86400)
let diff = cal.dateComponents([.day], from: now, to: later)
print("Days apart: \(diff.day ?? -1)")

日の開始時刻

startOfDay(for:)は、カレンダー上の日付の午前0時を返します。イベントを日ごとにまとめる場合に便利です。

import Foundation

let cal = Calendar.current
let midnight = cal.startOfDay(for: Date())
print(midnight <= Date())

同じ日の判定

isDate(_:inSameDayAs:)を使うと、2つの日付が同じ暦日に属するかどうかを判定できます。

import Foundation

let cal = Calendar.current
let now = Date()
let soon = now.addingTimeInterval(60)
print(cal.isDate(now, inSameDayAs: soon))

Calendarを使う理由

生の秒数を加算して計算すると、夏時間や月の境界をまたぐ場合に正しく処理できません。日、月、年の計算には必ずCalendarを使ってください。

import Foundation

let cal = Calendar.current
// Correct: add 1 month, not 30 * 86400 seconds.
if let d = cal.date(byAdding: .month, value: 1, to: Date()) {
    print("Added a month correctly: \(d > Date())")
}

確認問題

日付に1か月を正しく加算するメソッドはどれですか?

まとめ

Calendarは、DateComponentsを介してDateと名前付きの各フィールドを相互変換します。フィールドの取り出し、日付の構築、date(byAdding:)による単位の加算、差分の計算を行い、カレンダーを考慮した計算が生の秒数の計算より優れている理由も確認しました。次は、表示用の日付のフォーマットです。

よくある質問

「CalendarとDateComponents」レッスンは無料ですか?

はい。「CalendarとDateComponents」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「CalendarとDateComponents」で何を学びますか?

カレンダーをまたいだ日付計算を行います。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「CalendarとDateComponents」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Date型と時間間隔
  2. CalendarとDateComponents
  3. 日付の書式設定
  4. タイムゾーンとロケール
← Swift Academyに戻る