Obtenez l'heure d'époque Unix dans Swift


102

Comment obtenez-vous les secondes de l'époque dans Swift?


2
Identique à Objective-C - utilisez NSDate.
gnasher729

2
J'ai évité de développer des produits Apple parce que je déteste Objective-C. Par conséquent, je ne l'ai pas appris. Et je sais que la syntaxe Swift est au moins légèrement différente. Montre-moi juste la syntaxe. Obtenez-vous une réputation SO facile.
Chris Redford


3
Non, il relie directement à l'entrée de la méthode Swift: - timeIntervalSince1970.
zaph

3
En fait, j'ai lié à la méthode spécifique :)
Martin R

Réponses:


162

Vous pouvez simplement utiliser la timeIntervalSince1970fonction de NSDate .

let timeInterval = NSDate().timeIntervalSince1970

7
Notez que Foundation doit être importée.
AlBlue

3
et sans utiliser Foundation?
marius

3
Si vous ne souhaitez pas utiliser Foundation, vous pouvez utiliser AFNetworking / AlamoFire ( github.com/Alamofire/Alamofire ) pour charger currentmillis.com , puis analyser le code HTML de la page. Notez que vous devez tenir compte des retards de mise en réseau et vérifier la connectivité. J'ai décidé de simplement utiliser Foundation ...
Chase Roberts

2
Que diriez-vous d'un int?
rstackhouse

82

Pour Swift 3.0

Date().timeIntervalSince1970

2
Bon. En outre, les gens peuvent être intéressés par stackoverflow.com/questions/39811352/swift-3-date-vs-nsdate
Matt Johnson-Pint

49
Le format de l'heure UNIX est en millisecondes. So Int (Date (). TimeIntervalSince1970 * 1000)
CHiP-love-NY

9
@ CHiP-love-NY: Ce n'est pas vrai. L'heure Unix est le nombre de secondes depuis le 1er janvier 1970, UTC.
Martin R

1
Il renvoie un TimeInterval , qui est en secondes
Daniel

1

Vous pouvez l'obtenir en utilisant ce qui suit

Int(Date().timeIntervalSince1970)

Ceci est pour la date actuelle, si vous souhaitez obtenir pour une date donnée

Int(myDate.timeIntervalSince1970)

Si vous souhaitez reconvertir de l'époque UNIX en heure Swift Date, vous pouvez utiliser

let date = Date(timeIntervalSince1970: unixtEpochTime)

0
1 second      = -
1 millisecond = 1,000 seconds
1 microsecond = 1,000,000 seconds

Swift's timeIntervalSince1970renvoie les secondes avec ce qui est documenté comme une précision "inférieure à la milliseconde", ce que j'ai observé pour signifier généralement des microsecondes mais parfois une échelle (un chiffre à droite de la décimale) de moins ou plus. Quand il renvoie une échelle de 5 (5 chiffres après la décimale), je ne sais pas si Swift laisse tomber le 0 final ou s'il ne peut pas produire 6 échelles de précision. Mais lorsqu'il renvoie une échelle de 7, ce chiffre supplémentaire peut être tronqué car il dépasse la précision de la microseconde. Par conséquent, pour des valeurs cohérentes et précises:

let preciseSeconds = Int(Date().timeIntervalSince1970)
let preciseMilliseconds = Int(Date().timeIntervalSince1970 * 1_000)
let preciseMicroseconds = Int(Date().timeIntervalSince1970 * 1_000_000) // most likely precise

Malheureusement, cependant, en 2038, les nombres 32 bits ne seront pas utilisables pour l'horodatage Unix et ils devront être 64 bits.

let seconds = Date().timeIntervalSince1970
let milliseconds = Date().timeIntervalSince1970 * 1_000
let microseconds = Date().timeIntervalSince1970 * 1_000_000

Une extension:

extension Date {
    var unixTimestamp: Int64 {
        return Int64(self.timeIntervalSince1970 * 1_000)
    }
}

Date().unixTimestamp

0

Si vous ne souhaitez pas importer Foundation, c'est-à-dire pour une utilisation Linux, etc., vous pouvez utiliser ce qui suit à partir de CoreFoundation:

import CoreFoundation

let timestamp = CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970

Savez-vous quand les choses pourraient devenir multiplateformes?
Zoltán Matók

@ ZoltánMatók J'ai entendu dire qu'ils prévoyaient de réimplémenter davantage la Fondation en plein air. Jetez un œil à forums.swift.org pour plus d'informations.
rshev
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.