2017-12-28 5 views
1

Ich arbeite am Datum Formatierer, ich habe eine Antwort des Datums vom Server in Zeichenfolge Typ .Was ich in Datumsformat konvertieren, aber was ich tun möchte, ist ein Datum zu konvertieren und dann nach lokaler Zeit verwalten. Konvertieren von Datum in lokale Zeitzone IOS Swift

For Example 
if 12/06/2017, 06:48:03 is a date from server so i m from pakistan so it gives me a date and time According to GMT + 5 which is 12/06/2017, 11:48:03 

same as from india it gives me a date and time According to GMT +5:30 which is 12/06/2017, 12:18:03 

hier ist ein Quellcode

public class func converServerTimeStampToDate (_ timeStamp: String) -> Date { 



     let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = "MM/dd/yyyy, hh:mm:ss a" 
     dateFormatter.timeZone = TimeZone(abbreviation: "UTC") 
     let localDate = dateFormatter.date(from: timeStamp) 
     dateFormatter.timeZone = TimeZone.current 
     dateFormatter.dateFormat = "MM/dd/yyyy, hh:mm:ss a" 

     // return dateFormatter.string(from: localDate!) 
     return dateFormatter.date(from:dateFormatter.string(from: 
     localDate!))! 

    } 

Jede mögliche Hilfe würde geschätzt !!

+0

Lesen Sie diesen [Beitrag] (https://stackoverflow.com/a/47942040/6822622) ist dies hilfreich für Sie – AshvinGudaliya

+0

Post Ihren Code, den Sie verwendet haben, um Datum zu formatieren –

+0

@MZubairShamshad überprüfen Sie den Quellcode –

Antwort

2

Wenn Sie das Ergebnis will nur ein Date sein Ziel, den ersten Teil von @ IntelliJ-Shivam Antwort benutzen:

func serverToLocal(date:String) -> Date? { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 
    dateFormatter.timeZone = TimeZone(abbreviation: "UTC") 
    let localDate = dateFormatter.date(from: date) 

    return localDate 
} 

(Anmerkung dass DateFormatter.date(from:) gibt ein optionales zurück, das korrekt ist, da die Eingabe-Datumszeichenfolge nicht im richtigen Format vorliegt.)

Es gibt keine Date in Ihrer lokalen Zeitzone. Dates haben keine Zeitzone. Sie zeichnen einen Zeitpunkt auf der ganzen Welt auf.

Um ein Datum in Ihrer Zeitzone angezeigt werden Sie die DateFormatter Klassenmethode localizedString() verwenden können:

let dateString = DateFormatter.localizedString(
    inputDate, 
    dateStyle: .medium, 
    timeStyle: .medium) 
+1

(Ich denke, Sie sollten akzeptieren @ Intellij-Shivam die Antwort. Der Code oben ist sein, mit nur geringfügigen Änderungen.) –

1

Ich hoffe, das für Ihr Problem arbeiten

func serverToLocal(date:String) -> Date { 
let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" 
dateFormatter.timeZone = TimeZone(abbreviation: "UTC") 
let date = dateFormatter.date(from: date) 
dateFormatter.timeZone = TimeZone.current 
let timeStamp = dateFormatter.string(from: date!) 

return date 
} 
+0

zurückgeben kann Sie die 'd ändern ateFormat nach dem Format, in dem Sie das Datum und die Uhrzeit erhalten –

+1

Das Auspacken der Ausgabe eines Dateformatter erzwingen ist eine schlechte Idee in einer Funktion, die das Datumsformat als Eingabeargument akzeptiert. Entweder machen Sie Ihre Funktion umwerfbar oder geben NULL zurück, wenn eines der beiden Formate falsch ist. – AshvinGudaliya

+0

Ich weiß für zufällige dateFormat es ist keine gute Idee, aber wenn die wissen, das DateFormat, die wir bekommen werden, glaube ich nicht, dass es keinen Schaden darin ist, den Rückgabewert zu erzwingen, wenn wir das genaue Datumsformat kennen werden bekommen. –

Verwandte Themen