SWIFT: Wie füge ich Stunden NSDate-Objekt
Generiere ich ein NSDate-Objekt aus string.
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.timeZone = NSTimeZone(abbreviation: "GMT")
let stringToDate = dateFormatter.dateFromString(dateFromService) // 2015-07-20 12:00:43 +0000
Bekomme ich diese Zeichenkette mit dem Wert von webserver. Ich brauche zu ändern, für den persönlichen Gerät Zeitzone. Hinzufügen möchten Stunden stringToDate Objekt, aber nicht die Arbeit
var addHours : Int = 2 //2 hours will be added
var newDate = stringToDate.dateByAddingTimeInterval(addHours)
sieht aus wie Sie hinzufügen, 2 Sekunden, nicht 2 Stunden. timeInterval ist immer in Sekunden. oder Sie können Komponenten von NSDate. hinzufügen
sollten Sie verwenden
Ja , er ist das hinzufügen von Sekunden.
Int = Hour *60*60
sollten Sie verwenden
NSDateComponents
zu Datum und Uhrzeit anpassen.Ja , er ist das hinzufügen von Sekunden.
NSTimeInterval
vertreten Sekunden.
InformationsquelleAutor Mehmet | 2015-07-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du hast die falsche Frage gestellt. Dies ist, was ist bekannt als eine ""XY-Problem".
Sie sollten sich Fragen "Wie kann ich die Anzeige eines Datums-Zeichenfolge, die ich von einem web-server in Ihrer lokalen Zeitzone."
NSDate
repräsentiert ein Datum/Zeit in eine abstrakte form, die nicht enthalten eine Zeitzone. Konvertieren Sie es zu einer bestimmten Zeitzone anzuzeigen. Versuchen Sie nicht, addieren oder subtrahieren Stunden, um ein NSDate, um den offset für Zeit-Zonen. Das ist der falsche Ansatz.Die richtige Antwort ist einfach. Erstellen Sie ein zweites date formatter und nicht setzen Sie die Zeitzone auf GMT. Es wird standardmäßig der Benutzer, der lokalen Zeitzone.
Und fehlte ein Semikolon. 🙂
gespeichert meiner Zeit, thaks es funktionierte
So habe es geschafft. Danke für den Fang, und Dank nhgrif für die Festsetzung es.
upvote für das XY-problem 🙂
InformationsquelleAutor Duncan C
Verwenden
NSCalendarComponents
:Mit
NSCalendar
wird Konto für Dinge wie Schaltsekunden, springen Stunden, etc.Aber als Duncan C s Antwort Punkte aus, einfach hinzufügen Stunden ist definitiv der falsche Ansatz. Zwei Zeitzonen nicht immer getrennt werden, indem die gleiche Menge an Zeit. Das ist wieder etwas besonders wahr, wenn wir die Sommerzeit berücksichtigt. (Zum Beispiel, die Vereinigten Staaten nicht den Anfang/das Ende der Sommerzeit an denselben Tagen wie in Europa, und in Arizona gar nicht tun Sommerzeit).
Hmm, ja. Aber es gibt auch andere Gründe für die Verwendung von
NSCalendar
. Es ist letztlich mehr lesbar... und es wird Sie in die Gewohnheit zu tun, es schreiben so, dass, wenn es zu einem Punkt, wo es unzweifelhaft Sache, die Sie nicht bekommen es falsch.Sicher. Ich hauptsächlich hinweisen wollte, dass das argument "NSCalendar etc notwendig ist, um Konto für leap seconds" ist falsch.
InformationsquelleAutor nhgrif
für swift 3 mit dieser Funktion können Sie...
InformationsquelleAutor Usman Nisar
Wenn Sie es tun, oft mehr, check-out-Bibliothek namens SwiftMoment (inspiriert durch das gleiche .js-Bibliothek), der es erlaubt, folgende (und viel mehr!):
Moment ist ein wrapper um NSDate-Instanz, während die Dauer (das ist, was Sie von Int.Stunden, Int.Minuten etc.) umschließt eine NSTimeInterval Wert.
Umsetzung dieses sollten Sie nur einen Augenblick! (Wortspiel beabsichtigt).
InformationsquelleAutor Jiri Trecak