将未知格式(任何格式)的string转换为date

我有包含date​​string的数据。

通常情况下,将在1月。 3,1966'式格式,但由于国际上的差异,可能并不总是如此。

我需要读取数据并将其转换为标准datestring('YYYY-MM-DD')。

基本上这是我迄今为止:

var dataString = 'Jan. 3, 1966' var dateFormatter = NSDateFormatter() dateFormatter.dateFormat = # I DON'T KNOW THE EXACT INPUT FORMAT ! let dateValue = dateFormatter.dateFromString(dataString) 

Xcode 9•Swift 4Xcode 8.3.2•Swift 3.1

您可以使用NSDataDetector如下所示:

 extension String { var nsString: NSString { return self as NSString } var length: Int { return nsString.length } var nsRange: NSRange { return NSRange(location: 0, length: length) } var detectDates: [Date]? { return try? NSDataDetector(types: NSTextCheckingResult.CheckingType.date.rawValue) .matches(in: self, range: nsRange) .flatMap{$0.date} } } extension Collection where Iterator.Element == String { var dates: [Date] { return flatMap{$0.detectDates}.flatMap{$0} } } 

testing:

 let dateStrings = ["January 3, 1966","Jan 3, 1966", "3 Jan 1966"] for dateString in dateStrings { if let dateDetected = dateString.detectDates?.first { print(dateDetected) // 1966-01-03 14:00:00 +0000 // 1966-01-03 14:00:00 +0000 // 1966-01-03 14:00:00 +0000 } } let dateStrings = ["January 3, 1966","Jan 3, 1966", "3 Jan 1966"] for date in dateStrings.dates { print(date) // 1966-01-03 14:00:00 +0000 // 1966-01-03 14:00:00 +0000 // 1966-01-03 14:00:00 +0000 } 

MKDataDetectorbuild立在NSDataDetector – 因此让你放弃任何实现来完成这个任务。 它还扩展了String以提供方便的数据检测。