Question

Quelqu'un sait comment convertir une date de JSON (tiques) à un NSDate en Objective-C? Quelqu'un peut-il afficher un code?

Était-ce utile?

La solution

Je devine ici, mais votre valeur JSON est le nombre de millisecondes depuis 1970, non? Vous pouvez utiliser la méthode de dateWithTimeIntervalSince1970: de NSDate pour retourner un objet NSDate avec le temps correct. Assurez-vous de convertir les millisecondes JSON nombre de secondes avant de passer à Cocoa NSDate-- utilise NSTimeInterval dans la plupart des endroits, ce qui représente un intervalle en secondes.

Autres conseils

Il va à peu près comme ceci:

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

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

Il faudrait détecter les paramètres régionaux du client afin de pouvoir le faire, et à moins que votre client sait comment faire cela, il n'y a probablement pas beaucoup.

Le descriptionWithLocale de NSDate: serait fonction du format pour un autre lieu. Et timeIntervalSince1970 va revenir aux (secondes) depuis 1970, que vous pouvez multiplier par 1000 pour obtenir ms pour revenir au client. Il est dans la documentation NSDate.

http://developer.apple .com / documentation / cacao / Référence / Fondation / Classes / NSDate_Class / Référence / Reference.html

Selon cette page: http://msdn.microsoft .com / fr-fr / bibliothèque / system.datetime.ticks.aspx tiques débuterait le 1er janvier 0001 si dateWithTimeIntervalSince1970: n'est pas configuré automatiquement pour fonctionner avec les tiques. Vous pouvez toujours utiliser cette méthode, mais doit régler la différence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top