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, Dateest 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 DateComponentspour spécifier les composants, puis Calendarpour créer la date. Le Calendardonne le Datecontexte. 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 DateFormattersupports.
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 CalendarUnitpour 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 DateFormatterclasse.
// 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