La conversión de la fecha JSON (garrapatas) a NSDate
-
13-09-2019 - |
Pregunta
¿Alguien sabe cómo convertir una fecha JSON (garrapatas) a una NSDate en Objective-C? ¿Puede alguien publicar algo de código?
Solución
Estoy adivinando aquí, pero su valor JSON es el número de milisegundos desde el año 1970, ¿verdad? Puede utilizar el método de dateWithTimeIntervalSince1970:
NSDate para devolver un objeto NSDate la hora correcta. Sólo asegúrese de convertir el número de milisegundos a segundos JSON antes de pasarla a NSDate-- cacao utiliza NSTimeInterval en la mayoría de lugares, lo que representa un intervalo en segundos.
Otros consejos
Se va más o menos así:
// Input string is something like: "/Date(1292851800000+0100)/" where
// 1292851800000 is milliseconds since 1970 and +0100 is the timezone
NSString *inputString = [item objectForKey:@"DateTimeSession"];
// This will tell number of seconds to add according to your default timezone
// Note: if you don't care about timezone changes, just delete/comment it out
NSInteger offset = [[NSTimeZone defaultTimeZone] secondsFromGMT];
// A range of NSMakeRange(6, 10) will generate "1292851800" from "/Date(1292851800000+0100)/"
// as in example above. We crop additional three zeros, because "dateWithTimeIntervalSince1970:"
// wants seconds, not milliseconds; since 1 second is equal to 1000 milliseconds, this will work.
// Note: if you don't care about timezone changes, just chop out "dateByAddingTimeInterval:offset" part
NSDate *date = [[NSDate dateWithTimeIntervalSince1970:
[[inputString substringWithRange:NSMakeRange(6, 10)] intValue]]
dateByAddingTimeInterval:offset];
Habría que detectar el entorno local del cliente con el fin de ser capaz de hacer eso, y menos que su cliente sabe cómo hacerlo, probablemente no haya mucho sentido.
descriptionWithLocale de NSDate: sería la manera de realizar el formato de otra localidad. Y timeIntervalSince1970 volverá a los (segundos) desde 1970, que se podría multiplicar por 1000 para obtener ms para volver al cliente. Todo está en la documentación NSDate.
De acuerdo a esta página: http://msdn.microsoft .com / es-es / library / system.datetime.ticks.aspx garrapatas comienzan el 1 de enero de 0001 por lo que dateWithTimeIntervalSince1970:
no es automáticamente configurado para trabajar con las garrapatas. Puede seguir utilizando este método, pero debe ajustar la diferencia.