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



我需要检查日期字符串是否具有这种确切格式 2017-01-01 00:00:00.000 和 3 个小数毫秒,否则返回。

我正在使用yyyy-MM-dd hh:mm:ss.SSS但这不会返回任何十进制毫秒。为什么?当我使用DateFormatterDate()转换为字符串时,它会返回正确的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...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")
}

最新更新