Testato con Swift 4
Ottenere la data e l'ora correnti
È possibile ottenere la data e l'ora correnti semplicemente come questo:
let currentDateTime = Date()
Tuttavia, Date
è un numero in virgola mobile a 64 bit che misura il numero di secondi dalla data di riferimento del 1 gennaio 2001 alle 00:00:00 UTC . Posso vedere quel numero per il datetime corrente usando
Date().timeIntervalSinceReferenceDate
Al momento della stesura di questo articolo, è tornato 497626515.185066
, probabilmente non esattamente quello che stai cercando. Continua a leggere.
Creare un'altra data e ora
Metodo 1
Se conosci il numero di secondi prima o dopo la data di riferimento, puoi usarlo.
let someOtherDateTime = Date(timeIntervalSinceReferenceDate: -123456789.0) // Feb 2, 1997, 10:26 AM
Metodo 2
Certo, sarebbe più facile usare cose come anni, mesi, giorni e ore (piuttosto che secondi relativi) per fare un Date
. Per questo è possibile utilizzare DateComponents
per specificare i componenti e quindi Calendar
per creare la data. La Calendar
dà il Date
contesto. Altrimenti, come potrebbe sapere in quale fuso orario o calendario esprimerlo?
// 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)
Altre abbreviazioni del fuso orario sono disponibili qui . Se lo lasci vuoto, l'impostazione predefinita è utilizzare il fuso orario dell'utente.
Metodo 3
Il modo più conciso (ma non necessariamente il migliore) potrebbe essere l'uso DateFormatter
.
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm"
let someDateTime = formatter.date(from: "2016/10/08 22:31")
Gli standard tecnici Unicode mostrano altri formati che DateFormatter
supportano.
Visualizzazione della data e dell'ora
Metodo 1
Se si desidera visualizzare solo determinati componenti della data o dell'ora, è possibile utilizzare CalendarUnit
per specificare i componenti da cui si desidera estrarre 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
Vedi anche questa risposta .
Metodo 2
Il metodo 1 ti ha fornito i componenti, ma sarebbe molto difficile formattare quei numeri per ogni stile, lingua e regione. E non è necessario. Questo è già stato fatto per te con la DateFormatter
classe.
// 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
Ecco una continuazione del codice sopra che mostra più opzioni di formattazione:
// "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)
Tieni presente, tuttavia, che questo è per l'inglese con la regione impostata negli Stati Uniti. Per altre lingue e regioni la formattazione avrà un aspetto diverso.
Ulteriore studio