Pergunta

Alguém sabe como converter uma data JSON (carrapatos) a um NSDate em Objective-C? Alguém pode postar algum código?

Foi útil?

Solução

Eu estou supondo aqui, mas o seu valor JSON é o número de milissegundos desde 1970, certo? Você pode usar o método dateWithTimeIntervalSince1970: de NSDate para retornar um objeto NSDate com a hora correta. Apenas certifique-se de converter o número do JSON milissegundos para segundos antes de passá-la para NSDate-- Cacau usa NSTimeInterval na maioria dos lugares, o que representa um intervalo em segundos.

Outras dicas

Ele vai mais ou menos assim:

// 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 )

Você teria que detectar a localidade do cliente, a fim de ser capaz de fazer isso, ea menos que seu cliente sabe como fazer isso, provavelmente não há muito sentido.

descriptionWithLocale de NSDate: seria a maneira de formatá-lo para outro local. E timeIntervalSince1970 vai voltar aos (segundos) desde 1970, o que você poderia multiplicar por 1000 para obter ms para retornar para o cliente. É tudo na documentação NSDate.

http://developer.apple .com / documentation / Cacau / Referência / Fundação / Classes / NSDate_Class / Referência / reference.html

De acordo com esta página: http://msdn.microsoft .com / en-us / library / system.datetime.ticks.aspx carrapatos início em 01 de janeiro de 0001 de modo dateWithTimeIntervalSince1970: não é automaticamente configurado para trabalhar com carrapatos. Você ainda pode usar este método, mas deve ajustar para a diferença.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top