Convertendo data JSON (carrapatos) para NSDate
-
13-09-2019 - |
Pergunta
Alguém sabe como converter uma data JSON (carrapatos) a um NSDate em Objective-C? Alguém pode postar algum código?
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];
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.
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.