Swift Academy · Lekcja

Calendar i DateComponents

Wykonywanie obliczeń na datach w różnych kalendarzach.

Lekcja 2 z 413 kroki

Calendar i DateComponents to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Calendar i DateComponents

Obiekt Calendar interpretuje obiekt Date jako jednostki używane przez ludzi, takie jak rok, miesiąc i dzień. DateComponents przechowuje te wyodrębnione wartości.

Bieżący kalendarz

Calendar.current odzwierciedla ustawienia użytkownika. Jest pośrednikiem między surowymi momentami reprezentowanymi przez Date a nazwanymi polami.

import Foundation

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

Wyodrębnianie składowych

dateComponents(_:from:) pobiera żądane pola z daty i umieszcza je w wartości typu DateComponents.

import Foundation

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

Odczytywanie pojedynczego pola

Skrót component(_:from:) zwraca bezpośrednio jedno pole jako wartość typu Int.

import Foundation

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

Tworzenie daty ze składowych

Należy wypełnić obiekt DateComponents, a następnie poprosić kalendarz o utworzenie odpowiadającej mu daty Date za pomocą date(from:).

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)")
}

Działania na datach

date(byAdding:to:) bezpiecznie dodaje określoną liczbę jednostek, samodzielnie uwzględniając długość miesięcy i lata przestępne.

import Foundation

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

Dodawanie wielu jednostek

Można dodać kilka jednostek naraz, przekazując obiekt DateComponents opisujący przesunięcie.

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())
}

Różnice między datami

Operację można odwrócić: dateComponents(_:from:to:) zwraca liczbę jednostek, które upłynęły między dwiema datami.

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)")

Początek dnia

startOfDay(for:) zwraca północ danego dnia w określonym kalendarzu, co jest przydatne podczas grupowania zdarzeń według dni.

import Foundation

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

Sprawdzanie, czy to ten sam dzień

isDate(_:inSameDayAs:) informuje, czy dwie daty przypadają na ten sam dzień kalendarzowy.

import Foundation

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

Dlaczego używać Calendar

Wykonywanie obliczeń przez dodawanie surowej liczby sekund daje błędne wyniki przy zmianie czasu letniego i na granicach miesięcy. Do obliczeń dotyczących dni, miesięcy i lat zawsze należy używać 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())")
}

Szybkie sprawdzenie

Która metoda prawidłowo dodaje jeden miesiąc do daty?

Podsumowanie

Calendar konwertuje obiekty Date na nazwane pola i odwrotnie, korzystając z DateComponents. Wyodrębniali Państwo pola, tworzyli daty, dodawali jednostki za pomocą date(byAdding:), obliczali różnice i poznali powody, dla których obliczenia kalendarzowe są lepsze od operowania na surowych sekundach. Następny temat: formatowanie dat na potrzeby wyświetlania.

Bezpłatny start

Ucz się Swift dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
122
Lekcje
409

Często zadawane pytania

Czy lekcja „Calendar i DateComponents” jest bezpłatna?

Tak — pełny tekst „Calendar i DateComponents” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Calendar i DateComponents”?

Wykonywanie obliczeń na datach w różnych kalendarzach. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Calendar i DateComponents”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Typ Date i przedziały czasu
  2. Calendar i DateComponents
  3. Formatowanie dat
  4. Strefy czasowe i ustawienia regionalne
← Powrót do Swift Academy