获取日期格式 | Swift | iOS

Get the format of date | Swift | iOS

根据要求,我的 API 可能 return 日期为“2018-01-01”或“01-01-2018”或“2018-01-01T00:00”: 00"格式

如何检查日期的格式?

例如:我的 API 响应“2018-01-01”的代码应该 return 我 "yyyy-MM-dd" 等等。

我可以通过检查字符的长度并相应地指定日期格式来做到这一点..但我觉得这不是正确的方法。

在 API 中使用不明确的日期格式是有风险的。但是如果你坚持这样做,你可以制作多个 DateFormatters 并为每个配置一个特定的格式(通过相应地设置它们的 dateFormat )并尝试依次使用每个转换字符串。一旦你成功了,你就知道你得到的是哪种格式(它是dateFormat)。

您只需定义日期格式并尝试每一种格式。其中之一会成功。只要确保所有日期字符串都来自同一时区(我想它们都是 UTC)并且在使用固定格式日期时不要忘记将日期格式化程序语言环境设置为“en_US_POSIX”:

let dateStrings = ["2018-01-01", "01-01-2018", "2018-01-01T00:00:00"]
let dateFormats = ["yyyy-MM-dd'T'HH:mm:ss", "yyyy-MM-dd", "MM-dd-yyyy"]
let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .iso8601)
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0)
var dates: [Date] = []
for dateString in dateStrings {
    for dateFormat in dateFormats {
        formatter.dateFormat = dateFormat
        if let date = formatter.date(from: dateString) {
            dates.append(date)
            print("dateFormat:", dateFormat)
            print("date:", date)
            break
        }
    }
}

这将打印

dateFormat: yyyy-MM-dd

date: 2018-01-01 00:00:00 +0000

dateFormat: MM-dd-yyyy

date: 2018-01-01 00:00:00 +0000

dateFormat: yyyy-MM-dd'T'HH:mm:ss

date: 2018-01-01 00:00:00 +0000