转换具有未知格式(任何格式)的字符串到目前为止 [英] Convert string with unknown format (any format) to date
本文介绍了转换具有未知格式(任何格式)的字符串到目前为止的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的数据包含日期字符串。
I have data that contains a date string.
通常它会在'Jan. 1966年3月的'类型格式,但由于国际差异,它可能并不总是那样。
Normally it would be in a 'Jan. 3, 1966' type format, but because of international differences, it may not always be exactly that.
我需要读取数据并将其转换为标准日期字符串('YYYY-MM-DD')。
I need to read the data in and convert it into a standard date string ('YYYY-MM-DD').
基本上这就是我到目前为止:
Basically this is what I have so far:
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 4 或 Xcode 8.3.2•Swift 3.1
您可以使用NSDataDetector如下:
You can use NSDataDetector as follow:
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
}
这篇关于转换具有未知格式(任何格式)的字符串到目前为止的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文