Conversia unui „NS.time” din plist într-o oră reală (Programare, Python, Obiectiv C, Macos)

Stéphane Bruckert a intrebat.
a intrebat.

Am putut găsi următoarele date într-un fișier plist:

"NS.time" este o cheie pentru o valoare numerică.

NSLog(@"Type: %@", [[obj objectForKey:@"NS.time"] class]);
NSLog(@"My dictionary: %@", obj);

2014-10-09 11:04:49.409 MyApp[3792:303] Type: __NSCFNumber
2014-10-09 10:34:46.393 MyApp[3644:303] My dictionary: {
    "NS.time" = "434488287.651975";
}

Sunt acestea secunde? Milisecunde? Microsecunde?Cum pot obține o informație de timp corectă din ea?

Editați:

Am găsit ceea ce ar putea fi data corectă folosind Python:

>>> datetime.datetime(2001, 1, 1) + datetime.timedelta(seconds=434488287.651975)
datetime.datetime(2014, 10, 8, 19, 11, 27, 651975)

Cum pot face acest lucru folosind Objective-C?

Comentarii

  • Cine a pus informațiile în plist? –  > Por Tipul.
  • care arată ca secunde de la data de referință, de obicei data de referință este 1.1.2001 sau cam așa ceva… –  > Por Volker.
1 răspunsuri
Tipul
  1. Creați un NSDate pentru 2001, 1, 1, 1.
  2. Utilizați NSDate’s - (id)dateByAddingTimeInterval:(NSTimeInterval)seconds pentru a obține noua dată.NSDate *tagDate = [referenceDate dateByAddingTimeInterval:434488287.651975];

Editat de OP:

Aici este codul complet pe care l-am folosit:

NSTimeInterval interval = [[obj objectForKey:@"NS.time"] doubleValue];
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:interval];

dateWithTimeIntervalSinceReferenceDate este foarte util în acest caz. Acesta creează și returnează un NSDate setat la un anumit număr de secunde de la prima clipă a zilei de 1 ianuarie 2001, GMT.