2017-05-31 2 views
0

Ich suchte hier in SO aber kann keinen nützlichen Thread finden, um zu erreichen, was ich will. Ich bin neu bei Swift, also weiß ich nicht viel davon. In diesem Szenario möchte ich eine bestimmte Zeitzone festlegen, die vom Benutzer mit den Einstellungen der App geändert werden kann. Was ich möchte ist, wenn der Benutzer die Zeitzone geändert hat, sollte es durch die App reflektieren. Ja, ich kann die Zeitzone in jedem "DateFormatter" einstellen, aber ich möchte es nicht jedes Mal schreiben, wenn ich einen DateFormatter erzeuge.Setze globale TimeZone für DateFormatter

Gibt es eine Möglichkeit, also wenn ich eine Instanz des DateFormatter erstellen, ist die Zeitzone bereits auf die vom Benutzer ausgewählte Zeitzone eingestellt? Ist es möglich, dies mit einer Erweiterung des DateFormatter zu tun?

Antwort

1

Was Sie tun können, ist Erweiterung von Date zu machen, wie von Ihnen diese TimeZone-DateFormatter setzen Sie das Datum Formiat, so stellen zwei Verlängerungs eine für Date und eine für String.

extension Date { 

    struct CustomDateFormatter { 

     static var currentTimeZone = TimeZone.current //Set default timeZone that you want 

     static func dateFormatter(withFormat format: String) -> DateFormatter { 
      let formatter = DateFormatter() 
      formatter.timeZone = CustomDateFormatter.currentTimeZone 
      formatter.dateFormat = format 
      return formatter 
     }    
    } 

    func toDateString(withFormat format: String) -> String { 
     return CustomDateFormatter.dateFormatter(withFormat: format).string(from: self) 
    } 
} 

extension String { 
    func toDate(withFormat format: String) -> Date? { 
     return Date.CustomDateFormatter.dateFormatter(withFormat: format).date(from: self) 
    } 
} 

Jetzt, wann immer Sie brauchen TimeZone setzen oder Date zu String oder umgekehrt diese Erweiterung verwenden konvertieren möchten wie diese.

//Set timezone 
Date.CustomDateFormatter.currentTimeZone = TimeZone(abbreviation: "GMT")! 
//get date from String 
let date = "31-05-2017 07:30:05".toDate(withFormat: "dd-MM-yyyy HH:mm:ss") 
//get string from date with specific format 
let dateString = Date().toDateString(withFormat: "dd-MM-yyyy HH:mm:ss") 
+1

Das funktioniert gut! Vielen Dank! – SquareBox

+0

@SquareBox Willkommen Kumpel :) –

Verwandte Themen