2012-11-11 1 views
7

Ich bin ein Anfänger und ich wurde beauftragt, eine iPhone App für unseren Kunden zu erstellen. Ich habe etwas Hintergrund mit Java, aber fast keine Erfahrung in diesem Ziel-c und das ist meine erste Zeit, eine vollständige Anwendung zu entwickeln ...Wie konvertiert man NSDate in Integer, um PHP date() als Unix-Timestamp zu übergeben?

Wie auch immer, ich stapeln derzeit bei mehreren Problemen. Eines dieser Probleme ist, dass ich einen Integer-Wert für PHP's date Funktion von meiner iOS App senden muss. Ich habe nach der Lösung gesucht, aber alle von ihnen beschäftigen sich mit entgegengesetzten Wegen (int zu NSDate), nicht NSDate zu ganzzahligem Wert.

Ich habe versucht, Lösungen wie beantwortet here aber es ist offensichtlich, dass es doppelt, nicht eine ganze Zahl zurückgibt ...
Oder this aber dies nicht die System time bekommen konnte.

Ich weiß, ich konnte mit dem aktuellen System NSDate erhält mit:

NSDate *theDay = [NSDate dateWithTimeIntervalSinceNow:[[NSTimeZone systemTimeZone] secondsFromGMT]]; 

Aber ich kann nicht herausfinden, wie diesen (oder lang) Wert auf eine ganze Zahl zu konvertieren.

Ich muss nur den gleichen Wert erhalten, wie wir in Java mit System.currentTimeMillis() bekommen können.

Auch das ist mein erstes Mal hier im Stackoverflow Fragen zu stellen. Bitte lass es mich wissen, wenn ich irgendetwas tun oder nicht machen soll, wenn du hier Fragen stellst.

Danke.

Antwort

7

Um das aktuelle Datum zu erhalten, sollten Sie diese verwenden:

NSDate *theDate = [NSDate date]; 

es seit dem 1. Januar 1970 als Doppel in Sekunden zu erhalten, verwenden Sie: erhalten

NSTimeInterval seconds = [[NSDate date] timeIntervalSince1970]; 

zu in ms multiplizieren Sie einfach den vorherigen Wert mit 1000 und lassen ihn vom Compiler in eine Ganzzahl umwandeln, ohne dass zusätzlicher Code benötigt wird:

Und wie @HotLicks weist darauf hin, während System.currentTimeMillis() in GMT ist, wenn Sie die lokale Zeit benötigen, könnten Sie verwenden: (. Ich denke, dass die meisten Web-Services obwohl GMT wollen)

long long milliseconds = ([[NSDate date] timeIntervalSince1970] 
         + [[NSTimeZone defaultTimeZone] secondsFromGMT]) * 1000; 

+1

Es sollte Beachten Sie, dass NSDate standardmäßig/design relativ zu UTC/GMT ist und keine Zeitzoneninformationen enthält. Wenn man "lokale" Zeit haben möchte, muss der Zeitzonenversatz (geeignet skaliert auf Sekunden oder Millisekunden) hinzugefügt werden. –

+2

@HotLicks: Es sollte auch beachtet werden, dass 'System.currentTimeMillis()' (in Java) die Zeit in UTC zurückgibt. ;-) – lnafziger

+0

@lnafziger Danke für schnelle und klare Erklärungen und Lösungen! Ich habe das schon einmal probiert, aber es hat nicht das richtige Ergebnis von unserem PHP-Server zurückgegeben. Ich führe jetzt jedoch einen kurzen Test in Java durch und kann bestätigen, dass Ihr Code das gleiche Ergebnis liefert wie Java's currentTimeMillis. Wie Hot Licks darauf hingewiesen haben, muss ich wahrscheinlich den Zeitzonen-Offset selbst hinzufügen (daher gibt es für mich eigentlich keinen "einfachen Weg", um den Wert mit der Zeitzone "automatisch" zu erhalten, mit einfacher einfacher Methode). Danke euch beiden, dass ihr euch die Zeit genommen habt, meine Frage zu lesen und große Hilfe! –