Calendar i DateComponents
Wykonywanie obliczeń na datach w różnych kalendarzach.
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.
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
- Typ Date i przedziały czasu
- Calendar i DateComponents
- Formatowanie dat
- Strefy czasowe i ustawienia regionalne