Obtenez l'heure d'époque Unix dans Swift

102

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

Chris Redford
la source
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
Yannik
la source
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
Sumit Oberoi
la source
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)
Mohammad Sadiq
la source
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
bsod
la source
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
rshev
la source
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