听起来很简单,但很难在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”
我已经有了使用字符串操作的解决方案,但我不认为这是理想的解决方案。如果必须用字符串完成,你怎么做?
答案 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