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

标签 ios swift nsdate nsdateformatter

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

通常是在“一月”。 3, 1966' 类型格式,但由于国际差异,可能并不总是如此。

我需要读取数据并将其转换为标准日期字符串('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 11.4 • Swift 5.2 或更高版本

您可以按如下方式使用 NSDataDetector:

extension String {
    var nsString: NSString { self as NSString }
    var length: Int { nsString.length }
    var nsRange: NSRange { .init(location: 0, length: length) }
    var detectDates: [Date]? {
        try? NSDataDetector(types: NSTextCheckingResult.CheckingType.date.rawValue)
                .matches(in: self, range: nsRange)
            .compactMap(\.date)
    }
}
<小时/>
extension Collection where Iterator.Element == String {
    var dates: [Date] { compactMap(\.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
}

关于ios - 将未知格式(任何格式)的字符串转换为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35079499/

相关文章:

iphone - 无法对 UIBarButtonItem 设置操作

objective-c - 在 iOS 中创建 PDF 注释

ios - FIRInstanceID/警告停止!!将从内存中重置 deviceID [Xcode : Console Log]

使用自分配证书的IOS wkwebview

swift - 如何在 Swift 中获取当前时间?

ios - swift 本月的第一天和最后一天

ios - 如何从 URL 获取图像并放入 NSArray?

ios - UIStoryboardScene 意外地释放其 Controller 而不更改保留计数

ios - Swift & Firebase - 无法转换类型为 '__NSDictionaryM' 的值

objective-c - JSON 日期到 NSDate 问题