Pregunta

¿Alguien sabe cómo convertir una fecha JSON (garrapatas) a una NSDate en Objective-C? ¿Puede alguien publicar algo de código?

¿Fue útil?

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];

(de https://gist.github.com/726910 )

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.

http://developer.apple .com / documentation / Cacao / Referencia / Fundación / Clases / NSDate_Class / Referencia / reference.html

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top