使用 NSDateFormatter
,如果我传入一个带偏移量的 ISO-8601 日期+时间值,它将读取偏移量并将输出调整为 UTC 值,如下所示:
// Setup
let formatter = NSDateFormatter()
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
// Test
let input = "2016-04-16 04:12:00-0800"
let output = formatter.dateFromString( input )
let outputStr = formatter.stringFromDate( output )
print( outputStr ) // "2016-04-15 08:12:00-0000"
到目前为止,还不错。
但我想自己获得那个偏移值。我的应用程序是保留日期时间偏移信息的 web 服务的客户端,所以我必须做同样的事情(就好像我盲目地将 outputStr
返回给 web 服务,它会丢失偏移信息,因此数据库将不知道收集日期时间时的偏移量是多少。
NSDateFormatter
似乎只接受输出日期的时区信息,我无法从输入字符串中获取数字偏移量。
最佳答案
“不言自明”的例子
import Foundation
let formatter = NSDateFormatter()
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd HH:mm:ssZ"
// Test
let input = "2016-04-16 04:12:00-0800"
let output = formatter.dateFromString( input )
// with curent time zone (system default
let outputStrL = formatter.stringFromDate( output! )
// with time zone Z+0000
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
let outputStr = formatter.stringFromDate( output! )
// with time zone Z-0800
formatter.timeZone = NSTimeZone(forSecondsFromGMT: -8 * 3600)
let outputStr1 = formatter.stringFromDate( output! )
print("My local time:", outputStrL)
print("GMT+0000 time:", outputStr)
print("GMT-0800 tume:", outputStr1)
/*
My local time: 2016-04-16 14:12:00+0200
GMT+0000 time: 2016-04-16 12:12:00+0000
GMT-0800 tume: 2016-04-16 04:12:00-0800
*/
如果用任何输出字符串(outputStr、outputStrL、outputStr1)替换输入字符串,从它创建的 NSDate 代表相同的值(时间)
关于swift - 在 Swift 中从 ISO-8601 字符串中提取偏移值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36416529/