zurück Ich habe gerade angefangen, die Swift 3.0 Kalendermethode startOfDay zu verwenden. Es funktioniert in den meisten Fällen gut, aber manchmal hat es eine Zeit von 3 Uhr morgens im zurückgegebenen Datum zurückgegeben. Ich bin ein productionDate von einem Web-Service bekommen, die ich von einem Unix-Stil-String bin Umwandlung mit dem folgende VerfahrenSwift 3.0 - Kalender startOfDay Methode gibt 3am
static let dateFormatString = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
static func dateForDateString(dateString: String) -> Date?
{
let formatter = DateFormatter()
formatter.dateFormat = dateFormatString
return formatter.date(from: dateString)
}
Beispiel Datum/Zeit-String
2017-03-01T09:38:05-05:00
ich dann einen Integer-Wert speicherte (timeIntervalSince1970) zu Firebase, wo ich das falsche Datum als 3am sehen kann. Hier ist ein Ausschnitt von Code, den ich den Int-Wert zu erzeugen verwende ich
let startofDay = Calendar.current.startOfDay(for: productionDate)
let dateValue = Int(startofDay.timeIntervalSince1970)
zu Feuerbasis speicherte Wie ich schon sagte, die meiste Zeit, endet vorerst Mitternacht des richtigen Zeitpunkt, aber wenn die App Wenn ich im Hintergrund vom Webservice abrufe, sehe ich gelegentlich 3 Uhr in der Firebase-Datenbank.
Ich weiß, dass ich hier eine Menge Informationen nicht gegeben habe. Ich hoffe wirklich, dass jemand das gleiche Problem hat und einen Weg gefunden hat, es zu reparieren, oder jemand kann meinen Code ansehen und mir sagen, wie ich ein Dummkopf bin.
Danke!
Wahrscheinlich mischen Sie UTC mit Ihrer aktuellen Zeitzone. –
@Robert Ich bekomme einen Zeitzonen-String-Wert wie 'America/New_York' in der Web-Service-Payload, also werde ich dies verwenden, um den DateFormatter zu initialisieren. Vielen Dank! – Moebius
Warum versuchen Sie den startOfDay zu bekommen? Besser, mittags (12 Uhr) zu verwenden, wenn Sie ein Datum für kalendarische Berechnungen benötigen. Jeden Tag hat 12 Uhr, aber nicht jeden Tag hat 12 Uhr. –