Swift:从日期对象获取偏移值

use*_*042 4 date swift

听起来很简单,但很难在谷歌中找到我的确切问题。我试图忽略 UTC 打印输出值。我收到多个日期,这只是一个示例:(可能是 +0900、-0200 等...)

“2017-05-01T12:30:00-0700”

一旦我使用这些行将其应用到一个值:

let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssxxxxx"
if let result = formatter.date(from: time) {print result}
Run Code Online (Sandbox Code Playgroud)

dateTimeResult 的值打印:

2017-05-01 19:30:00 世界标准时间

使用快速日期对象,如何切出“-0700”部分,将-7或+7(此示例为负数)乘以分钟乘以秒。我会将这个总数保存为 DB 中的 int (稍后我需要它来对不同时区进行分类)。然后使用以下行将该总计应用于传入的日期输入:

let output = Calendar.current.date(byAdding: .second, value: totalSecs, to: result)
Run Code Online (Sandbox Code Playgroud)

目标是在这个日期结束:

“2017-05-01 12:30:00”

我已经有了使用字符串操作的解决方案,但我认为这不是理想的解决方案。如果必须通过字符串来完成,你会怎么做?

vad*_*ian 5

如果我理解正确,您只需要日期和时间部分,而始终忽略时区信息。

在这种情况下,使用正则表达式从日期字符串中去除时区

let dateString = "2017-05-01T12:30:00-0700"
let dateStringIgnoringTimeZone = dateString.replacingOccurrences(of: "[+-]\\d{4}", with: "", options: .regularExpression)
print(dateStringIgnoringTimeZone) // "2017-05-01T12:30:00"
let dateFormatter = DateFormatter()
dateFormatter.calendar = Calendar(identifier: .iso8601)
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
let date = dateFormatter.date(from: dateStringIgnoringTimeZone)!
Run Code Online (Sandbox Code Playgroud)