为什么`在date不同的时间里,(date:.day,in:.era,for:date)给出相同的结果?

考虑下面的代码:

import UIKit let date = Date() guard let nycTimeZone = TimeZone(abbreviation: "EST"), let nzTimeZone = TimeZone(abbreviation: "NZDT") else { fatalError() } var nycCalendar = Calendar(identifier: .gregorian) nycCalendar.timeZone = nycTimeZone var nzCalendar = Calendar(identifier: .gregorian) nzCalendar.timeZone = nzTimeZone let now = Date() let nycDayOfEra = nycCalendar.ordinality(of: .day, in: .era, for: now) let nycDayOfYear = nycCalendar.ordinality(of: .day, in: .year, for: now) var nzDayOfEra = nzCalendar.ordinality(of: .day, in: .era, for: now) var nzDayOfYear = nzCalendar.ordinality(of: .day, in: .year, for: now) 

正如我写这篇文章,纽约时间和纽西兰时间给予不同的日子。 这是我感兴趣的情况。

有了上面的代码,nycDayOfYear和nzDayOfYear的结果是不同的(截止本文,我得到nycDayOfYear = 42和nzDayOfYear = 43。)

这是预期的,并根据需要。 (我正在努力回答“如何计算在不同时区评估的两个date的差异天数?”问题。)

然而,要进行上述日常计算,需要进行一系列混乱的调整,并计算出跨越年份边界的当地date之间的差异天数。

因此,我试图使用ordinality(of: .day, in: .era, for: date)

但是,无论用于计算的日历时区如何,基于日历时代的计算都会给出相同的值。

这是为什么?

计算两个date之间的日历天数差异时,如果在不同的本地时间范围内表示,那么这将是一种更简单的方法? 正如我所说,我的代码计算一年的日子将需要额外的逻辑添加处理日历年日历的边界。

请注意,这是一个不同于“两个date之间有多less天差异”的问题。 在我的问题中,我希望两个date在不同的当地时区表示,我对每个date值的日历date有所不同。

马丁对长时间间隔日历计算的评论给出了意想不到的结果,这与其为什么不起作用一样是一个好答案。

我确实想出了一些代码,用于计算在特定时区中表示的两个date之间的日历date值所需的差异:

 let date = Date() guard let nycTimeZone = TimeZone(abbreviation: "EST"), let nzTimeZone = TimeZone(abbreviation: "NZDT") else { fatalError() } var nycCalendar = Calendar(identifier: .gregorian) nycCalendar.timeZone = nycTimeZone var nzCalendar = Calendar(identifier: .gregorian) nzCalendar.timeZone = nzTimeZone let now = Date() let nycDateComponents = nycCalendar.dateComponents([.month, .day, .year], from: now) let nzDateComponents = nzCalendar.dateComponents([.month, .day, .year], from: now) let difference = Calendar.current.dateComponents([.day], from: nycDateComponents, to: nzDateComponents) let daysDifference = difference.days 

首先,我使用设置为特定时区的日历将date转换为月/日/年的DateComponents值。

然后我使用Calendar函数dateComponents(_:from:to:) ,它可以让你计算2个DateComponents值之间的差异,无论你想用什么单位比较它们。 (在这种情况下,天)