Testowane z Swift 4
Uzyskiwanie aktualnej daty i godziny
Możesz uzyskać bieżącą datę i godzinę tak prosto, jak to:
let currentDateTime = Date()
Jednakże, Date
jest 64-bitowa liczba zmiennoprzecinkowa mierząc liczbę sekund od daty odniesienia od 1 stycznia 2001 r 00:00:00 UTC . Widzę ten numer dla bieżącej daty i godziny przy użyciu
Date().timeIntervalSinceReferenceDate
W momencie pisania tego tekstu wrócił 497626515.185066
, prawdopodobnie nie dokładnie to, czego szukasz. Czytaj dalej.
Tworzenie innej daty i godziny
Metoda 1
Jeśli znasz liczbę sekund przed lub po dacie odniesienia, możesz jej użyć.
let someOtherDateTime = Date(timeIntervalSinceReferenceDate: -123456789.0) // Feb 2, 1997, 10:26 AM
Metoda 2
Oczywiście łatwiej byłoby użyć rzeczy takich jak lata, miesiące, dni i godziny (zamiast względnych sekund) do stworzenia Date
. W tym celu można użyć DateComponents
do określenia składników, a następnie Calendar
do utworzenia daty. Calendar
Daje Date
kontekst. W przeciwnym razie, skąd miałby wiedzieć, w której strefie czasowej lub kalendarzu wyrazić to?
// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 1980
dateComponents.month = 7
dateComponents.day = 11
dateComponents.timeZone = TimeZone(abbreviation: "JST") // Japan Standard Time
dateComponents.hour = 8
dateComponents.minute = 34
// Create date from components
let userCalendar = Calendar.current // user calendar
let someDateTime = userCalendar.date(from: dateComponents)
Inne skróty stref czasowych można znaleźć tutaj . Jeśli pozostawisz to pole puste, domyślnie będzie używana strefa czasowa użytkownika.
Metoda 3
Najbardziej zwięzłym (ale niekoniecznie najlepszym) sposobem może być użycie DateFormatter
.
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm"
let someDateTime = formatter.date(from: "2016/10/08 22:31")
Te normy techniczne Unicode pokazać inne formaty , że DateFormatter
obsługuje.
Wyświetlanie daty i godziny
Metoda 1
Jeśli chcesz tylko wyświetlić niektóre składniki daty lub godziny, możesz użyć CalendarUnit
do określenia składników, z których chcesz wyodrębnić Date
.
// get the current date and time
let currentDateTime = Date()
// get the user's calendar
let userCalendar = Calendar.current
// choose which date and time components are needed
let requestedComponents: Set<Calendar.Component> = [
.year,
.month,
.day,
.hour,
.minute,
.second
]
// get the components
let dateTimeComponents = userCalendar.dateComponents(requestedComponents, from: currentDateTime)
// now the components are available
dateTimeComponents.year // 2016
dateTimeComponents.month // 10
dateTimeComponents.day // 8
dateTimeComponents.hour // 22
dateTimeComponents.minute // 42
dateTimeComponents.second // 17
Zobacz także tę odpowiedź .
Metoda 2
Metoda 1 dała ci składniki, ale sformatowanie tych liczb dla każdego stylu, języka i regionu wymagałoby dużo pracy. I nie musisz. To już zostało zrobione dla ciebie z DateFormatter
klasą.
// get the current date and time
let currentDateTime = Date()
// initialize the date formatter and set the style
let formatter = DateFormatter()
formatter.timeStyle = .medium
formatter.dateStyle = .long
// get the date time String from the date object
formatter.string(from: currentDateTime) // October 8, 2016 at 10:48:53 PM
Oto kontynuacja powyższego kodu, który pokazuje więcej opcji formatowania:
// "10/8/16, 10:52 PM"
formatter.timeStyle = .short
formatter.dateStyle = .short
formatter.string(from: currentDateTime)
// "Oct 8, 2016, 10:52:30 PM"
formatter.timeStyle = .medium
formatter.dateStyle = .medium
formatter.string(from: currentDateTime)
// "October 8, 2016 at 10:52:30 PM GMT+8"
formatter.timeStyle = .long
formatter.dateStyle = .long
formatter.string(from: currentDateTime)
// "October 8, 2016"
formatter.timeStyle = .none
formatter.dateStyle = .long
formatter.string(from: currentDateTime)
// "10:52:30 PM"
formatter.timeStyle = .medium
formatter.dateStyle = .none
formatter.string(from: currentDateTime)
Pamiętaj jednak, że dotyczy to języka angielskiego z regionem ustawionym na USA. W przypadku innych języków i regionów formatowanie będzie wyglądać inaczej.
Dalsze badanie