Domanda

Qualcuno sa come convertire una data JSON (zecche) ad un NSDate in Objective-C? Qualcuno può inviare un certo codice?

È stato utile?

Soluzione

Sto indovinando qui, ma il valore della JSON è il numero di millisecondi dal 1970, giusto? È possibile utilizzare il metodo di dateWithTimeIntervalSince1970: NSDate per restituire un oggetto NSDate con l'ora esatta. Basta fare in modo di convertire il numero di millisecondi JSON a pochi secondi prima di passarlo a NSDate-- cacao utilizza NSTimeInterval nella maggior parte dei posti, che rappresenta un intervallo in secondi.

Altri suggerimenti

Si va grosso modo così:

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

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

Dovreste rilevare locale del cliente al fine di essere in grado di farlo, e meno che il cliente sa come fare, probabilmente non ha molto senso.

descriptionWithLocale di NSDate: sarebbe il modo si formatta per un altro locale. E timeIntervalSince1970 tornerà alle (secondi) dal 1970, che si potrebbe moltiplicare per 1000 per ottenere ms per tornare al cliente. E 'tutto nella documentazione NSDate.

http://developer.apple .com / documentazione / cacao / Reference / Fondazione / Corsi / NSDate_Class / Reference / Reference.html

In base a questa pagina: http://msdn.microsoft .com / it-it / library / system.datetime.ticks.aspx zecche inizio il 1 gennaio 0001 in modo da dateWithTimeIntervalSince1970: non è automaticamente configurato per lavorare con le zecche. È comunque possibile utilizzare questo metodo, ma dovrebbe regolare la differenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top