2016-08-23 2 views
2

Ein einfacher Code, um Stringdatum in NSDate zu konvertieren. Aber weiß nicht, warum es aktuelles Datum zurückkehren - 1swift nsdate gibt eine falsche Ausgabe

var start_date: NSDate? 
var end_date: NSDate? 

let dateformatter = NSDateFormatter() 
dateformatter.dateFormat = "yyyy-MM-dd" 

start_date = dateformatter.dateFromString("2016-09-01")! 
end_date = dateformatter.dateFromString("2016-09-07")! 

print(start_date) 
print(end_date) 

Ausgang

2016-08-31 18:30:00 +0000 
2016-09-06 18:30:00 +0000 

Antwort

0

ich vor ähnliche Probleme. Ich denke, es hängt mit Ihrer Zeitzone zusammen. Und nach einigen Probieren, tat ich dies und es funktionierte irgendwie ...

let components = NSCalendar.currentCalendar().components([.Year, .Month, .Day], fromDate: yourDate) 
components.timeZone = NSTimeZone(name: "GMT") 
let correctDate = NSCalendar.currentCalendar().dateFromComponents(components)! 

Grundsätzlich wechseln die Zeitzone GMT ...

ich Sie empfehlen, eine Erweiterung zu erstellen:

extension NSDate { 
    func switchToCorrectTimeZone() -> NSDate { 
     let components = NSCalendar.currentCalendar().components([.Year, .Month, .Day], fromDate: self) 
     components.timeZone = NSTimeZone(name: "GMT") 
     return NSCalendar.currentCalendar().dateFromComponents(components)! 
    } 
} 
1

Sie müssen Zeitzone einzustellen, in Ihrem dateformat zu UTC

let dateformatter = NSDateFormatter() 
    dateformatter.dateFormat = "yyyy-MM-dd" 
    dateformatter.timeZone = NSTimeZone(name: "UTC") 

    start_date = dateformatter.dateFromString("2016-09-01")! 
    end_date = dateformatter.dateFromString("2016-09-07")! 

Das hat mein Problem zu beheben.

+0

Ich fand Ihre und Sweeper beide Antwort sind nützlich und geben Sie mir jetzt korrekte Ausgabe. Also, was ist die Standard TimeZone Swift Assign für NSDateFormatter(). –

+0

Ich denke, es ist Ihre lokale Zeitzone @ManishJain – Sweeper

+1

Dies wird neue Probleme erzeugen. NSDate wird in UTC gespeichert, während nsdateformatter die aktuelle Zeitzone berücksichtigt. Mit diesem Code ändern Sie die Daten um 5:30 Stunden aus. – vikingosegundo