Ios Swift4:日历给了我错误的秒值FromGMT

Ios Swift4:日历给了我错误的秒值FromGMT,ios,swift,Ios,Swift,对于我的iOS应用程序,我需要计算一些日期和时间。通过使用课堂日历,我发现这门课给了我一些错误的19世纪及之前的日期值。在此期间,欧洲的时区非常无组织。例如,GMT+0:53:28。课程日历知道这一点,并告诉我正确的时区。但是“secondsFromGMT”的返回值是错误的:在本例中为3600秒。是否有人有此错误或相关问题的经验 import Foundation let timeZone = TimeZone(identifier: "Europe/Berlin") var calendar

对于我的iOS应用程序,我需要计算一些日期和时间。通过使用课堂日历,我发现这门课给了我一些错误的19世纪及之前的日期值。在此期间,欧洲的时区非常无组织。例如,GMT+0:53:28。课程日历知道这一点,并告诉我正确的时区。但是“secondsFromGMT”的返回值是错误的:在本例中为3600秒。是否有人有此错误或相关问题的经验

import Foundation

let timeZone = TimeZone(identifier: "Europe/Berlin")
var calendar = Calendar.current
calendar.timeZone = timeZone!

let formatter = DateFormatter()
formatter.dateFormat = "dd.MM.yyyy HH:mm:ss"
formatter.locale = Locale(identifier: "en-US")

let date = formatter.date(from: "01.07.1622 08:10:00")!

formatter.dateStyle = .long
formatter.timeStyle = .long

let stringDate = formatter.string(from: date)
let offsetFromGMT = calendar.timeZone.secondsFromGMT(for: date)
print(stringDate, "  Offset =", offsetFromGMT)

1622年7月1日上午8:10:00 GMT+0:53:28 Offset=3600

我不知道为什么会被否决或认为“不清楚”——格式化日期的GMT偏移量为“+0:53:28”,但secondsFromGMT()返回3600。可能是日历例程在过去不起作用,但这是一个清晰且可重复的问题描述。我c/p了您的代码,在OSX测试中,我在最后中断了,得到了奇怪的结果,可能会给您一些线索。获得了“1622年7月1日格林尼治标准时间上午8:10:00+0:09:21偏移量=3600”的打印结果。然后
po formatter.timeZone?.secondsFromGMT(for:date)
让它在我这边工作(得到“561”)。但奇怪的是,它不适用于
po时区?.secondsFromGMT(for:date)
(得到“3600”)。根据print
calendar.timeZone.secondsFromGMT()
Swift issues中的struct/class?解析GMT和Europe/Berlin中的日期,然后获取它们之间的间隔,得到正确的结果
3208.0秒
。我想知道
timeZone.secondsFromGMT
是否真的检查历史日期,因为它现在不真正检查日历。也许它只检查夏令时?谢谢你的帮助和评论。我对时区有了更深的了解。时区应具有计算未来夏令时的算法和历史事件列表(例如1916-1918年第一次世界大战期间的夏令时)。有趣的是,DateFormatter工作正常,但时区包含错误。这只有在苹果两次执行相同任务的情况下才能解释。如果是这样,那么它就是一个糟糕的软件架构。顺便说一句,时区为“欧洲/巴黎”,它工作正常。