web-dev-qa-db-fra.com

Comment obtenir un horodatage actuel à 18 chiffres dans Swift?

Je veux obtenir le timestamp actuel comme ceci:

636110767775716756​

Cependant, quand je le fais:

NSDate().timeIntervalSince1970

Il retourne une valeur comme celle-ci:

1475491615.71278

Comment puis-je accéder aux ticks d'horodatage actuels dans le format souhaité? Je vérifie les dates de ici:

18
The Cook

Vous semblez chercher quoi DateTime.Ticks est en C #, c’est-à-dire le temps écoulé depuis le 0001-01-01, mesuré à des 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 sous forme de chaîne:

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

Et tant qu’on y est, la conversion inverse des 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)
23
Martin R

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

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

Usage:

let currentTimeStamp = Date().toMillis()

À votre santé

15
Hermann Kuschke

Dans Swift:

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

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

Ensuite, vous pouvez l'appeler

println("Timestamp: \(Timestamp)")

Le * 1000 est pour millisecondes, si vous préférez, vous pouvez le supprimer. Si le garder comme un NSTimeInterval.

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

en objectif C:

Si vous souhaitez déclarer une constante symbolique, reportez-vous au code ci-dessous:

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

Puis appelez comme ça:

NSString * timestamp = TimeStamp;

Ou créez une méthode globale:

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

Avoir une note: Le 1000 est de convertir l'horodatage en millisecondes. Vous pouvez l'enlever si vous préférez timeInterval en secondes.

9
vaibhav