使用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
似乎只接受输出日期的时区信息,我无法从输入字符串中获取数字偏移量。
答案 0 :(得分:0)
'自我解释'的例子
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表示相同的值(时间)