将未知格式(任何格式)的字符串转换为日期 [英] Convert string with unknown format (any format) to date

查看:60
本文介绍了将未知格式(任何格式)的字符串转换为日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have data that contains a date string.

通常情况下会在 'Jan.3, 1966' 类型格式,但由于国际差异,它可能并不总是完全那样.

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 11.4 • Swift 5.2 或更高版本

您可以使用 NSDataDetector 如下:

You can use NSDataDetector as follow:

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
}

这篇关于将未知格式(任何格式)的字符串转换为日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆