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

时间:2017-05-10 19:07:12

标签: swift date

听起来很简单,但很难在Google中找到我的确切问题。 我试图忽略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}

dateTimeResult的值打印:

  

2017-05-01 19:30:00 UTC

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

let output = Calendar.current.date(byAdding: .second, value: totalSecs, to: result)

目标是结束这个日期:

  

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

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

2 个答案:

答案 0 :(得分:2)

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

在这种情况下,使用正则表达式

从日期字符串中删除时区
Person

答案 1 :(得分:1)

我认为您应该保留日期,然后只使用DateFormatter显示该时区的时间

let time = "2017-05-01T12:30:00-0700"
let dateFormatter = DateFormatter()
dateFormatter.calendar = Calendar(identifier: .iso8601)
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssxxxxx"
if let result = dateFormatter.date(from: time) {
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    print(dateFormatter.string(from: result))  // "2017-05-01 16:30:00   (corresponding time at my location GMT-3)
    // to display it at -0700 just set the formatter timaZone
    dateFormatter.timeZone = TimeZone(secondsFromGMT: -3600 * 7)
    print(dateFormatter.string(from: result))  // "2017-05-01 12:30:00\n"
}

从字符串中获取时区偏移量:

let hours = Int(String(time.characters.suffix(5).prefix(3))) ?? 0
var minutes = Int(String(time.characters.suffix(2))) ?? 0
if String(time.characters.suffix(5).prefix(1)) == "-" { minutes = -minutes }
let offset = hours * 3600 + minutes * 60    // -25200