ios - current - ¿Cómo obtener la marca de tiempo actual de 18 dígitos en Swift?
timestamp swift date (3)
Aquí hay una solución que me parece muy elegante. Extendí NSDate (aunque ahora es solo la Fecha en Swift 3) para incluir una función toMillis () que le dará el valor Int64 del objeto de fecha con el que está trabajando.
extension Date {
func toMillis() -> Int64! {
return Int64(self.timeIntervalSince1970 * 1000)
}
}
Uso:
let currentTimeStamp = Date().toMillis()
Aclamaciones
Quiero obtener la marca de tiempo actual de esta manera:
636110767775716756
Sin embargo, cuando lo hago:
NSDate().timeIntervalSince1970
Devuelve un valor como este:
1475491615.71278
¿Cómo accedo a las marcas de hora actuales en el formato que deseo? Reviso las fechas desde here:
Parece que estás buscando lo que DateTime.Ticks
está en C #, es decir, el tiempo desde 0001-01-01 medido en intervalos de 100 nanosegundos.
El código de su enlace proporcionado Swift: convierte NSDate a c # ticks se puede traducir a Swift fácilmente:
// 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)
}
}
Ejemplo (Swift 3):
let ticks = Date().ticks
print(ticks) // 636110903202288256
o como una cadena:
let sticks = String(Date().ticks)
print(sticks)
Y mientras estamos en ello, la conversión inversa de los tics a la Date
sería
// 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)
}
}
Ejemplo (Swift 3):
let date = Date(ticks: 636110903202288256)
En Swift:
Si quieres hacerla como variable global ve el siguiente código:
var Timestamp: String {
return "/(NSDate().timeIntervalSince1970 * 1000)"
}
Entonces, puedes llamarlo
println("Timestamp: /(Timestamp)")
El * 1000 es para milisegundos, si lo prefiere, puede eliminarlo. Si lo mantiene como un NSTimeInterval.
var Timestamp: NSTimeInterval {
return NSDate().timeIntervalSince1970 * 1000
}
En el objetivo C:
Si desea declarar como constante simbólica, consulte el siguiente código:
#define TimeStamp [NSString stringWithFormat:@"%f",[[NSDate date] timeIntervalSince1970] * 1000]
Entonces llámalo así:
NSString * timestamp = TimeStamp;
O crea un método global:
- (NSString *) timeStamp {
return [NSString stringWithFormat:@"%f",[[NSDate date] timeIntervalSince1970] * 1000];
}
Tenga una nota: El 1000 es para convertir la marca de tiempo a milisegundos. Puedes eliminar esto si prefieres tu timeInterval en segundos.