Frage

Wer weiß, wie ein JSON-Datum konvertieren (Ticks) zu einem NSDate in Objective-C? Kann jemand etwas Code schreiben?

War es hilfreich?

Lösung

Ich vermute, hier aber Ihr JSON-Wert ist die Anzahl der Millisekunden seit 1970, nicht wahr? Sie können NSDate die dateWithTimeIntervalSince1970: Methode verwenden, um ein NSDate Objekt mit der richtigen Zeit zurückzukehren. So stellen Sie sicher, dass die JSON Millisekunden Anzahl an Sekunden konvertieren, bevor es zu NSDate-- Cocoa verwendet NSTimeInterval in den meisten Orten vorbei, die in Sekunden ein Intervall darstellt.

Andere Tipps

Es geht ungefähr so:

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

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

Sie müssten die Client-Gebietsschema, um erkennen zu können, das zu tun, und es sei denn, Ihr Kunde weiß, wie das zu tun, gibt es wahrscheinlich nicht viel Sinn.

NSDate der descriptionWithLocale: wäre so, wie Sie es für ein anderes Gebietsschema formatiert werden. Und timeIntervalSince1970 wird seit 1970 auf die (in Sekunden) zurückgehen, die Sie mit 1000 multiplizieren könnten ms an den Client zurück zu bekommen. Es ist alles in der NSDate Dokumentation.

http://developer.apple .com / Dokumentation / Cocoa / Reference / Stiftung / Kurse / NSDate_Class / Reference / reference.html

Nach dieser Seite: http://msdn.microsoft .com / en-us / library / system.datetime.ticks.aspx ticks auf 1. Januar beginnen, 0001 so ist dateWithTimeIntervalSince1970: nicht automatisch Setup mit Zecken zu arbeiten. Sie können immer noch diese Methode verwenden, sollten aber für die Differenz einzustellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top