swift - 使用 DateFormatter 解析深奥的日期字符串

标签 swift date datetime nsdateformatter dateformatter

我想使用 Foundation 的 DateFormatter 来解析格式相当奇怪的日期字符串 /Date(1488335133000+0100)/ (代表 2017-03-01 03: 25:33)。据我所知,这将日期描述为自 1970 年以来的毫秒数,并指定了 GMT+1 时区。

但是我无法找到一种方法来将毫秒或秒的格式字符串指定为 unix 时间戳。这可能吗?

如果这不可能,正确解析此日期的最佳选择是什么?我目前正在求助于分离字符串,直到我得到毫秒和时区,将毫秒除以 1000,然后通过 Date(timeIntervalSince1970: seconds) 创建一个新的日期对象。虽然不太确定时区应该如何发挥作用。

最佳答案

DateFormatter 无法处理这个。使用 NSRegularExpression 来分离组件:

let str = "/Date(1488335133000+0100)/"

let regex = try! NSRegularExpression(pattern: "/Date\\((\\d+)(\\+|-)(\\d{2})(\\d{2})\\)/", options: [])
if let match = regex.firstMatch(in: str, options: [], range: NSMakeRange(0, str.characters.count)) {
    let nsstr = str as NSString
    let millisecond = Double(nsstr.substring(with: match.rangeAt(1)))!
    let sign        = nsstr.substring(with: match.rangeAt(2))
    let hour        = Double(nsstr.substring(with: match.rangeAt(3)))!
    let minute      = Double(nsstr.substring(with: match.rangeAt(4)))!

    let offset = (sign == "+" ? 1 : -1) * (hour * 3600.0 + minute * 60.0)
    let date   = Date(timeIntervalSince1970: millisecond / 1000 + offset)

    print(date)
}

关于swift - 使用 DateFormatter 解析深奥的日期字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42521887/

相关文章:

ios swift 如何与自定义单元格中的网点交互

azure - 如何更改 Azure DevOps 工作项中工作项的日期格式

angularjs - 在 AngularJS 中转换 JSON 日期

javascript - 如何在 React 中打印 JavaScript new Date()?

python - 在python中获取给定日期和UTC偏移量的GMT时间

ios - Action 不工作 UIBarButtonItem

iOS:存储 View 的实践

ios - (Firebase)在计算数组中的用户时在数据库中打印错误的用户数

C# 从今天的日期获取下一个第 N 个星期五的日期

python - 将字符串转换为不带 strptime 的日期时间对象