我需要检查日期字符串的格式是否为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。为什么呢?
答案 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")
}