日期字符串转换不 return 小数毫秒 Swift

Date string conversion doesn't return decimal miliseconds Swift

我需要检查日期字符串是否完全符合这种格式 2017-01-01 00:00:00.000,小数点后 3 毫秒,否则 return.

我正在使用 yyyy-MM-dd hh:mm:ss.SSS 但这没有 return 任何十进制毫秒。这是为什么?当我使用 DateFormatterDate() 转换为字符串时,它 return 是正确的 ss.SSS.

let str = "2017-01-01 00:00:00.000"
let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
df.timeZone = NSTimeZone(abbreviation: "GMT") as TimeZone!
if let date = df.date(from: str) {
    print("date: \(date)")
} else {
    print("no")
}

output: date: 2017-01-01 00:00:00 +0000

更多,如果我加上ss.S/ss.SS all return true 就没有错误了。为什么?

date formatter patterns 表示毫秒的 1...n 位有效。您可以根据需要写任意多的大写 S - 这没有区别。您必须单独检查第二个条件:

extension String {
    var endsWithThreeDecimalDigits: Bool {
        return self.range(of: "\.\d{3}$", options: .regularExpression) != nil
    }
}

let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
df.timeZone = TimeZone(abbreviation: "GMT")

if let date = df.date(from: str), str.endsWithThreeDecimalDigits {
    print("date: \(date)")
} else {
    print("no")
}