web-dev-qa-db-fra.com

NSDate timeIntervalSince1970 ne fonctionne pas dans Swift?

Je fais ça dans Swift:

let date = NSDate(timeIntervalSince1970: 1432233446145.0)
println("date is \(date)")

Le journal me donne ceci:

 date is 47355-09-02 23:55:45 +0000

Ensuite, j'essaie de récupérer un intervalle juste pour le test:

let tI = expirationDate.timeIntervalSinceDate(date)
println("tI = \(tI)")

Je reçois:

tI = 0,0

Qu'est-ce que je fais mal? Je peux sembler faire fonctionner correctement l'appel timeIntervalSince1970. Y a-t-il des informations connues à ce sujet dans Swift, ou ai-je oublié quelque chose ici?

16
zumzum

1432233446145 est très probablement un intervalle de temps donné en millisecondes :

let date = NSDate(timeIntervalSince1970: 1432233446145.0/1000.0)
print("date is \(date)")
// date is 2015-05-21 18:37:26 +0000

Swift 3 et versions ultérieures:

let date = Date(timeIntervalSince1970: 1432233446145.0/1000.0)
39
Martin R

Je pense que votre horodatage est incorrect. Il en résulte que votre date est le 2 septembre 47355.

Si j'utilise ce qui suit, j'obtiens la date de (à peu près) maintenant:

let date = NSDate(timeIntervalSince1970: 1431024488)
println("date is \(date)")
// "date is 2015-05-07 18:48:08 +0000"

La date imprimée n'est pas un horodatage localisé, vous devrez donc faire votre propre localisation, je suppose. Un exemple:

let formatter = NSDateFormatter()
formatter.dateFormat = "dd-MM-yyyy HH:mm:ss"
println("formatted date is \(formatter.stringFromDate(date))")
// "formatted date is 07-05-2015 20:48:08"

Et pour être complet, j'ai également vérifié avec une date d'expiration qui est 1100 secondes plus grande que la date initiale:

let expirationDate = NSDate(timeIntervalSince1970: 1431025588)
let diff = expirationDate.timeIntervalSinceDate(date)
println("expires in: \(diff)")
// "expires in: 1100.0"

Donc, le timeIntervalSince1970 semble bien fonctionner, je pense que votre intervalle n'était tout simplement pas ce que vous vouliez qu'il soit.

3
donnywals