Testé avec Swift 4
Obtention de la date et de l'heure actuelles
Vous pouvez obtenir la date et l'heure actuelles aussi simplement que ceci:
let currentDateTime = Date()
Cependant, Date
est un nombre à virgule flottante de 64 bits mesurant le nombre de secondes depuis la date de référence du 1er janvier 2001 à 00:00:00 UTC . Je peux voir ce nombre pour le datetime actuel en utilisant
Date().timeIntervalSinceReferenceDate
Au moment d'écrire ces lignes, il est revenu 497626515.185066
, probablement pas exactement ce que vous recherchez. Continue de lire.
Création d'une autre date et heure
Méthode 1
Si vous connaissez le nombre de secondes avant ou après la date de référence, vous pouvez l'utiliser.
let someOtherDateTime = Date(timeIntervalSinceReferenceDate: -123456789.0) // Feb 2, 1997, 10:26 AM
Méthode 2
Bien sûr, il serait plus facile d'utiliser des choses comme des années, des mois, des jours et des heures (plutôt que des secondes relatives) pour faire un Date
. Pour cela, vous pouvez utiliser DateComponents
pour spécifier les composants, puis Calendar
pour créer la date. Le Calendar
donne le Date
contexte. Sinon, comment pourrait-il savoir dans quel fuseau horaire ou calendrier l'exprimer?
// 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)
Vous trouverez d'autres abréviations de fuseau horaire ici . Si vous laissez ce champ vide, la valeur par défaut consiste à utiliser le fuseau horaire de l'utilisateur.
Méthode 3
La manière la plus succincte (mais pas nécessairement la meilleure) pourrait être d'utiliser DateFormatter
.
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm"
let someDateTime = formatter.date(from: "2016/10/08 22:31")
Les normes techniques Unicode montrent d' autres formats que DateFormatter
supports.
Affichage de la date et de l'heure
Méthode 1
Si vous souhaitez simplement afficher certains composants de la date ou de l'heure, vous pouvez utiliser CalendarUnit
pour spécifier les composants à partir desquels vous souhaitez extraire 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
Voir aussi cette réponse .
Méthode 2
La méthode 1 vous a donné les composants, mais ce serait beaucoup de travail de formater ces nombres pour chaque style, langue et région. Et vous n'en avez pas besoin. Cela a déjà été fait pour vous avec 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
Voici une suite du code ci-dessus qui montre plus d'options de formatage:
// "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)
Gardez à l'esprit, cependant, que c'est pour l'anglais avec la région définie aux États-Unis. Pour les autres langues et régions, la mise en forme sera différente.
Une étude plus approfondie