gpt4 book ai didi

swift - 在 Swift 中从 ISO-8601 字符串中提取偏移值

转载 作者:搜寻专家 更新时间:2023-11-01 05:36:54 25 4
gpt4 key购买 nike

使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com