将未知格式(任何格式)的字符串转换为日期

我有包含日期​​字符串的数据。

通常情况下,它会出现在“ Jan”中。1966年第3版的字型格式,但由于国际上的差异,不一定总是那样。

我需要读取数据并将其转换为标准日期字符串(’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)

回答:

您可以按以下方式使用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}

}

}

测试:

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

}

以上是 将未知格式(任何格式)的字符串转换为日期 的全部内容, 来源链接: utcz.com/qa/424704.html

回到顶部