gpt4 book ai didi

ios - Swift - 时区关闭一小时/秒 FromGMT 不正确

转载 作者:可可西里 更新时间:2023-11-01 00:41:41 25 4
gpt4 key购买 nike

这应该是一个非常简单的问题,但我似乎无法理解它。

鉴于我的时区是美国东部时间 (GMT-4),为什么 GMT 的 04:00 变成 23:00 而不是 00:00?

// The offset is -4 hours
let offsetFromGMT = Calendar.current.timeZone.secondsFromGMT() / 60 / 60

// 2017-03-12 04:00
var destinationComponents = DateComponents()
destinationComponents.timeZone = TimeZone(secondsFromGMT: 0)
destinationComponents.year = 2017
destinationComponents.month = 03
destinationComponents.day = 12
destinationComponents.hour = -offsetFromGMT // 4 hours

// Why is this 2017-03-11 23:00 and not 2017-03-12 00:00?
let date = Calendar.current.date(from: destinationComponents)!
// Outputs 23
Calendar.current.dateComponents([.hour], from: date).hour

最佳答案

Calendar.current.timeZone.secondsFromGMT()

是您所在时区的当前 GMT 偏移量。在你的情况下是 4 小时,因为纽约当前时区是 EDT = GMT-4,启用夏令时。

所以你的 destinationComponentsdate 是四点钟早上格林威治时间:

2017-03-12 04:00:00 +0000

那时,纽约时区是 EST = GMT-5,并且夏令时未激活。因此,该日期是您本地时区的 2017-03-11 23:00


我会采取不同的方式,避免“secondsFromGMT”。

示例:“2017-03-12 00:00:00”纽约时间为“2017-03-12 05:00:00”GMT。

var srcComponents = DateComponents()
srcComponents.timeZone = TimeZone(identifier: "America/New_York")!
srcComponents.year = 2017
srcComponents.month = 3
srcComponents.day = 12
srcComponents.hour = 0
srcComponents.minute = 0

let date = Calendar.current.date(from: srcComponents)!
print(date) // 2017-03-12 05:00:00 +0000

关于ios - Swift - 时区关闭一小时/秒 FromGMT 不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42761132/

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