Es ist eine Frage der Integer-Überlauf, als Boris wies in seiner Antwort darauf hin.
Ich weiß nicht, was Ihr time
Objekt ist, aber anstelle von signed long int
verwenden Sie eine NSTimeInterval
.
Auf iOS NSTimeInterval
wird derzeit als
typedef double NSTimeInterval;
definiert, aber man sollte nicht zu viel über die Pflege. Bleiben Sie bei Typ-Synonymen, schützen Sie sich, falls Apple beschließt, die zugrundeliegende Definition in etwas anderes zu ändern.
Das heißt Sie Ihren Code so etwas wie
NSTimeInterval epoch = [time doubleValue];
NSDate * date = [NSDate dateWithTimeIntervalSince1970:epoch];
In Bezug auf den Code Wartbarkeit Ausgabe ändern sollte ich zuvor beschrieben, hier werden Sie explizit einen doubleValue
verwenden (Sie müssen nicht viele Optionen haben), aber die gute Wenn Apple die NSTimeInterval
Definition zu etwas ändert, das nicht mit einer double
Zuweisung kompatibel ist, wird der Compiler Sie wissen lassen.
lesen [this] (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html) und [dies] (http://stackoverflow.com/ Fragen/5739598/setting-date-format-for-nsdateformatter) – tkanzakic