使用 DateFormatter 解析深奥的日期字符串
Using DateFormatter to parse an esoteric date string
我想使用 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)
}
我想使用 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)
}