16 votes

Comment obtenir l'horodatage actuel à 18 chiffres en Swift ?

Je veux obtenir l'horodatage actuel comme ceci :

636110767775716756​

Cependant, quand je le fais :

NSDate().timeIntervalSince1970

Il retourne une valeur comme ceci :

1475491615.71278

Comment accéder aux tics de l'horodateur actuel dans le format que je souhaite ? Je vérifie les dates de ici :

23voto

Martin R Points 105727

Vous semblez chercher ce que DateTime.Ticks est en C#, c'est-à-dire le le temps depuis 0001-01-01 mesuré en intervalles de 100 nanosecondes.

Le code de votre lien fourni Swift : convertir NSDate en ticks c# peut être traduit en Swift facilement :

// Swift 2:
extension NSDate {
    var ticks: UInt64 {
        return UInt64((self.timeIntervalSince1970 + 62_135_596_800) * 10_000_000)
    }
}

// Swift 3:
extension Date {
    var ticks: UInt64 {
        return UInt64((self.timeIntervalSince1970 + 62_135_596_800) * 10_000_000)
    }
}

Exemple (Swift 3) :

let ticks = Date().ticks
print(ticks) // 636110903202288256

ou comme une chaîne de caractères :

let sticks = String(Date().ticks)
print(sticks)

Et pendant que nous y sommes, la conversion inverse de ticks en Date serait

// Swift 2:
extension NSDate {
    convenience init(ticks: UInt64) {
        self.init(timeIntervalSince1970: Double(ticks)/10_000_000 - 62_135_596_800)
    }
}

// Swift 3:
extension Date {
    init(ticks: UInt64) {
        self.init(timeIntervalSince1970: Double(ticks)/10_000_000 - 62_135_596_800)
    }
}

Exemple (Swift 3) :

let date = Date(ticks: 636110903202288256)

14voto

Hermann Kuschke Points 141

Voici une solution que je trouve très élégante. J'ai étendu NSDate (bien que ce soit juste Date maintenant dans Swift 3) pour inclure un func toMillis() qui vous donnera la valeur Int64 de l'objet date avec lequel vous travaillez.

extension Date {
    func toMillis() -> Int64! {
        return Int64(self.timeIntervalSince1970 * 1000)
    }
}

Utilisation :

let currentTimeStamp = Date().toMillis()

Cheers

9voto

vaibhav Points 3264

Dans Swift :

si vous voulez en faire une variable globale, voir le code ci-dessous :

var Timestamp: String {
   return "\(NSDate().timeIntervalSince1970 * 1000)"
}

Ensuite, vous pouvez l'appeler

println("Timestamp: \(Timestamp)")

Le *1000 est pour les milisecondes, si vous préférez, vous pouvez l'enlever. Si vous le gardez comme un NSTimeInterval.

var Timestamp: NSTimeInterval {
    return NSDate().timeIntervalSince1970 * 1000
}

En Objective C :

Si vous voulez déclarer une constante symbolique, voir le code ci-dessous :

#define TimeStamp [NSString stringWithFormat:@"%f",[[NSDate date] timeIntervalSince1970] * 1000]

Alors appelez-le comme ceci :

NSString * timestamp = TimeStamp;

Ou créez une méthode globale :

- (NSString *) timeStamp {
    return [NSString stringWithFormat:@"%f",[[NSDate date] timeIntervalSince1970] * 1000];
}

Ayez une note : Le 1000 permet de convertir le timestamp en millisecondes. Vous pouvez l'enlever si vous préférez votre timeInterval en secondes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X