日期字符串转换不返回十进制毫秒Swift

时间:2017-08-22 21:54:43

标签: swift datetime nsdateformatter

我需要检查日期字符串的格式是否为2017-01-01 00:00:00.000,格式为3十进制毫秒,否则返回。

我正在使用yyyy-MM-dd hh:mm:ss.SSS,但这不会返回任何十进制毫秒数。这是为什么?当我将Date()转换为带有DateFormatter的字符串时,它会返回正确的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,则没有错误返回true。为什么呢?

1 个答案:

答案 0 :(得分:1)

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")
}