gpt4 book ai didi

swift - DateFormatter ISO 8601 时区

转载 作者:行者123 更新时间:2023-11-30 11:41:01 28 4
gpt4 key购买 nike

我正在尝试添加解析验证测试,并希望检查我发送的初始 JSON 是否可以转换为对象,并且该对象又转换为 JSON。最后验证将是两个字典是相等的。然而,我看到的是,虽然日期解析有效,但转换为字符串会将 +00:00 替换为 Z。在我的研究中,我发现它们是可以互换的,并且我知道理论上我可以将 Z 替换为 +00:00 进行比较,但我想知道是否ISO8601DateFormatter 或任何 DateFormatter 上有一种方法可以表明您更喜欢 +00:00 而不是 Z

对于那些喜欢查看代码的人,这是我的快速 Playground 示例。

var date = "2018-01-30T22:13:12+00:00"
let df = ISO8601DateFormatter()
df.formatOptions = [.withInternetDateTime]

let newDate = df.date(from: date)
let newString = df.string(from: newDate!)

最佳答案

ISO 8601 日期格式规定,当日期的时区偏移量为 0 时,应使用 Z。许多与 DateFormatter 一起使用的时区日期格式化符号也专门导致如果日期的时区偏移量为 0,则为 Z

如果您想从 Date 生成字符串,并且希望确保获得 +00:00 而不是 Z,然后将 DateFormatter 与适当的日期格式化程序说明符一起使用。

格式说明符xxx将为您提供格式为+00:00的时区。 XXXZZZZZ 也会为您提供相同的格式,但如果偏移量为 0,则会在结果中为您提供 Z。有关这些的更多信息,请参阅见于Unicode Technical Specification #35页。

ISO8601DateFormatter 及其 formatOptions 的文档指出,ZZZZZ 用于时区。因此,时区偏移量为 0 时,您始终会得到 Z

日期格式为 yyyy-MM-dd'T'HH:mm:ssxxxDateFormatter 将为您提供与您正在寻找的相同的结果。但还要确保将日期格式化程序的区域设置设置为 en_US_POSIX。您还需要确保输出以 UTC 时区显示。将格式化程序的 timeZone 属性设置为 TimeZone(secondsFromGMT: 0)

关于swift - DateFormatter ISO 8601 时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49287401/

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