Konvertieren Sie die Zeichenfolge in Swift in ein Datum


Antworten:


230
  • Konvertieren Sie die ISO8601-Zeichenfolge in das Datum

    let isoDate = "2016-04-14T10:44:00+0000"
    
    let dateFormatter = DateFormatter()
    dateFormatter.locale = Locale(identifier: "en_US_POSIX") // set locale to reliable US_POSIX
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
    let date = dateFormatter.date(from:isoDate)!
  • Rufen Sie die Datumskomponenten für Jahr, Monat, Tag und Stunde ab dem Datum ab

    let calendar = Calendar.current
    let components = calendar.dateComponents([.year, .month, .day, .hour], from: date)
  • Erstellen Sie schließlich ein neues DateObjekt und entfernen Sie Minuten und Sekunden

    let finalDate = calendar.date(from:components)

Beachten Sie auch den ISO8601DateFormatterin iOS 10 / macOS 12 eingeführten Convenience-Formatierer :

let isoDate = "2016-04-14T10:44:00+0000"

let dateFormatter = ISO8601DateFormatter()
let date = dateFormatter.date(from:isoDate)!

3
Das Z in "JJJJ-MM-TT'T'HH: MM: SSZ" löste, was für mich nicht funktionierte
Asheyla

Ich möchte nur Jahr Monat und Tag, aber das funktioniert nicht für mich
Sneha

@ Sneha Wenn Sie nicht wollen, dass die Stunde einfach weglassen.hour
vadian

@ Vadian Ich habe, aber ich bekomme nicht
Sneha

1
Alles in einem: ISO8601DateFormatter (). Date (von: "your string")!
Mike Irving

38

Versuchen Sie das folgende Datumsformat.

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZZZ"
let date = dateFormatter. dateFromString (strDate)

Ich hoffe es hilft..

Swift 4.1:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZZZ"
let date = dateFormatter.date(from: strDate)

10
Versuchte es, und Datum zurück Null danach.
Asheyla

1
Der Wert vom Typ 'String' kann unter Zwang nicht in den Typ 'Date' konvertiert werden
Oleksandr

22

In Swift 4.1 können Sie Folgendes tun:

func getDate() -> Date? {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    dateFormatter.timeZone = TimeZone.current
    dateFormatter.locale = Locale.current
    return dateFormatter.date(from: "2015-04-01T11:42:00") // replace Date String
}

16

Swift 3.0 - 4.2

import Foundation

extension String {

    func toDate(withFormat format: String = "yyyy-MM-dd HH:mm:ss")-> Date?{

        let dateFormatter = DateFormatter()
        dateFormatter.timeZone = TimeZone(identifier: "Asia/Tehran")
        dateFormatter.locale = Locale(identifier: "fa-IR")
        dateFormatter.calendar = Calendar(identifier: .gregorian)
        dateFormatter.dateFormat = format
        let date = dateFormatter.date(from: self)

        return date

    }
}

extension Date {

    func toString(withFormat format: String = "EEEE ، d MMMM yyyy") -> String {

        let dateFormatter = DateFormatter()
        dateFormatter.locale = Locale(identifier: "fa-IR")
        dateFormatter.timeZone = TimeZone(identifier: "Asia/Tehran")
        dateFormatter.calendar = Calendar(identifier: .persian)
        dateFormatter.dateFormat = format
        let str = dateFormatter.string(from: self)

        return str
    }
}

9

Hallo, Sie haben ein separates T-Format und konvertieren dann nach Belieben

// create dateFormatter with UTC time format
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
dateFormatter.timeZone = NSTimeZone(name: "UTC")
let date = dateFormatter.dateFromString("2015-04-01T11:42:00")

// change to a readable time format and change to local time zone
dateFormatter.dateFormat = "EEE, MMM d, yyyy - h:mm a"
dateFormatter.timeZone = NSTimeZone.localTimeZone() 
let timeStamp = dateFormatter.stringFromDate(date!)

5

Nur dateformatewenn du dein und dein Date bestanden hast, bekommst du Year,month,day,hour. Zusatzinformation

func GetOnlyDateMonthYearFromFullDate(currentDateFormate:NSString , conVertFormate:NSString , convertDate:NSString ) -> NSString
    {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = currentDateFormate as String
        let formatter = NSDateFormatter()
        formatter.dateFormat = Key_DATE_FORMATE as String
        let finalDate = formatter.dateFromString(convertDate as String)
        formatter.dateFormat = conVertFormate as String
        let dateString = formatter.stringFromDate(finalDate!)

        return dateString
    }


Holen Sie sich Jahr

let Year = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd'T'HH:mm:ssZ", conVertFormate: "YYYY", convertDate: "2016-04-14T10:44:00+0000") as String


Holen Sie sich Monat

let month = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd'T'HH:mm:ssZ", conVertFormate: "MM", convertDate: "2016-04-14T10:44:00+0000") as String


Holen Sie sich Tag

let day = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd'T'HH:mm:ssZ", conVertFormate: "dd", convertDate: "2016-04-14T10:44:00+0000") as String


Holen Sie sich Stunde

let hour  = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd'T'HH:mm:ssZ", conVertFormate: "hh", convertDate: "2016-04-14T10:44:00+0000") as String

4

globale Funktion machen

func convertDateFormat(inputDate: String) -> String {

     let olDateFormatter = DateFormatter()
     olDateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"

     let oldDate = olDateFormatter.date(from: inputDate)

     let convertDateFormatter = DateFormatter()
     convertDateFormatter.dateFormat = "MMM dd yyyy h:mm a"

     return convertDateFormatter.string(from: oldDate!)
}

Funktion aufgerufen und Wert darin übergeben

get_OutputStr = convertDateFormat(inputDate: "2019-03-30T05:30:00+0000")

und hier wird ausgegeben

Feb 25 2020 4:51 PM



 

1
Denken Sie, dass Ihre Eingabe und Ausgabe gleich sind?
Deepak Carpenter

2

In swift4,

    var Msg_Date_ = "2019-03-30T05:30:00+0000"

    let dateFormatterGet = DateFormatter()
    dateFormatterGet.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    let dateFormatterPrint = DateFormatter()
    dateFormatterPrint.dateFormat = "MMM dd yyyy h:mm a"  //"MMM d, h:mm a" for  Sep 12, 2:11 PM
    let datee = dateFormatterGet.date(from: Msg_Date_)
    Msg_Date_ =  dateFormatterPrint.string(from: datee ?? Date())

    print(Msg_Date_)

// Ausgabe: - 30. März 2019, 17:30 Uhr


2

Nur Schritt 1> Holen Sie sich den String-Wert von JSON oder dataSource

Schritt 2> Erstellen Sie eine lokale Variable und weisen Sie sie zu.

let startDate = CurrentDashBoard.startdate

Schritt 3> Erstellen Sie eine Instanz von DateFormatter.

let dateFormatter = DateFormatter()

Schritt 4> Rufen Sie das DateFormat von dateFormatter aus auf und geben Sie den Datentyp für das gespeicherte Datum ein.

dateFormatter.dateFormat = "MM-dd-yyyy HH:mm:ss"("may be String formate")

Schritt 5> Weisen Sie dieser zu konvertierenden Variablen die lokale Variable zu.

let dateFromStringstartDate : NSDate = dateFormatter.date(from: startDate)! as NSDate

Schritt 6> Geben Sie Ihr gewünschtes Datum an. Formatieren Sie mit dem folgenden Code.

dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss"

Schritt 6> Weisen Sie es Beschriftung / Text zu

cell.lblStartDate.text = String(format: "%@", strstartDate)

Code:

let startDate = CurrentDashBoard.startdate let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "MM-dd-yyyy HH:mm:ss" let dateFromStringstartDate : 
NSDate = dateFormatter.date(from: startDate)! as NSDate
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss"
let strstartDate = dateFormatter.string(from: dateFromStringstartDate as Date)

1

Swift 5. Um zu sehen, ob ein Datum verstrichen ist:

let expiryDate = "2020-01-10" // Jan 10 2020

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"

if Date() < dateFormatter.date(from: expiryDate) ?? Date() {
    print("Not Yet expiryDate")
} else {
    print("expiryDate has passed")
}

1

Ich wurde auch mit diesem Format verrückt.

Siehe die Lösung unten.

Ihr String, der von Ihrem Rücken oder einer anderen Quelle stammt:

    let isoDate = "2020-05-06 20:00:00-03"

Identifizieren Sie das Datumsformat

    let dateFormatter = DateFormatter()
    dateFormatter.locale = Locale(identifier: "en_US_POSIX")
    dateFormatter.dateFormat = "yyyy-MM-dd' 'HH:mm:ssZ"
    let date = dateFormatter.date(from:isoDate)!

Nachdem Sie das Datum als Date () festgelegt haben, können Sie mit formatDate.string in das gewünschte Format wechseln

    let formatDate = DateFormatter()
    formatDate.dateFormat = "dd/MM/yyyy HH:mm"
    let drawDate = formatDate.string(from: date)
    print(drawDate)

Ausgabe:

    06/05/2020 20:00

0

Verwenden Sie dazu eine ISO8601-Analysebibliothek. Es gibt zu viele Möglichkeiten, wie die Zeichenfolge codiert werden könnte. Verlassen Sie sich nicht auf ein bestimmtes Format und nicht darauf, dass der Server immer dasselbe sendet. Die Probleme beginnen mit dem 'Z' am Ende und erstrecken sich über alle Varianten des Standards. Eine Analysebibliothek behandelt alle Fälle und bietet immer eine sichere Konvertierung - während eine feste Formatierungszeichenfolge in Zukunft wahrscheinlich fehlschlägt.

Sie können eine dieser Bibliotheken verwenden. Sie sind auch auf CococaPods erhältlich:

https://github.com/boredzo/iso-8601-date-formatter/

https://github.com/malcommac/SwiftDate

Schauen Sie sich die Implementierungen an. Sie sind beide mehrere hundert Zeilen lang - aus gutem Grund.

Zur Frage: Mit NSDateComponents können Sie die Datumskomponenten aus dem Datum ziehen. Das Beispiel auf der Website deckt genau Ihren Fall ab.

https://developer.apple.com/documentation/foundation/nscalendar/1414841-components?language=objc

Bitte beachten Sie, dass bei der Konvertierung Ihres Datums die Zeitzone berücksichtigt wird. Möglicherweise möchten Sie das Gebietsschema des NSCalendar explizit festlegen.


0

Verwenden Sie einfach SwifterSwift.

stringDate = "2020-04-26T08:56:17.987Z"
let date = Date(iso8601String: stringDate)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.