代码之家  ›  专栏  ›  技术社区  ›  KvnH

日期格式Swift-多个输入格式[副本]

  •  0
  • KvnH  · 技术社区  · 7 年前

    我一直在遵循多个示例将我的iso日期字符串转换为本地日期字符串,并已完成以下工作:

        func ISOStringToLocal(ISODateString: String) -> String {
            let dateFormatterGet = DateFormatter()
            dateFormatterGet.timeZone = NSTimeZone(name: "UTC")! as TimeZone
            dateFormatterGet.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" //Input Format with seconds
            // dateFormatter.dateFormat = " yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ" //Input Format with milliseconds
    
            let dateFormatterPrint = DateFormatter()
            dateFormatterPrint.dateFormat = "dd-MMM-yyyy hh:mm:ss"
    
            if let date = dateFormatterGet.date(from: ISODateString) {
                return dateFormatterPrint.string(from: date)
            } else {
                return ""
            }
        }
    

    我如何允许 dateFormatterGet 接受毫秒和秒的另一种输入格式?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Gereon    7 年前

    你必须一个接一个地尝试这两种格式:

    func ISOStringToLocal(_ dateString: String) -> String {
        let dateFormatterGet = DateFormatter()
        dateFormatterGet.timeZone = TimeZone(identifier: "UTC")
        dateFormatterGet.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" // with seconds
    
        let dateFormatterPrint = DateFormatter()
        dateFormatterPrint.dateFormat = "dd-MMM-yyyy hh:mm:ss"
    
        if let date = dateFormatterGet.date(from: dateString) {
            return dateFormatterPrint.string(from: date)
        } else {
            dateFormatterGet.dateFormat = "yyyy-MM-dd'T'HH:mm:ss:SSSZZZZZ" // with millis
            if let date = dateFormatterGet.date(from: dateString) {
                return dateFormatterPrint.string(from: date)
            }
            return ""
        }
    }
    
    print(ISOStringToLocal("2017-07-01T13:24:00+02:00"))
    print(ISOStringToLocal("2017-07-01T13:24:00:123+02:00"))