为什么在每个时区的2个日期中,“(日期:.day,in:.era,for:date)”的统计结果会给出相同的结果?
考虑下面的代码:为什么在每个时区的2个日期中,“(日期:.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)。即如预期
,并根据需要。 (我正在努力回答“如何计算在不同时区评估的两个日期中差异的天数?”问题)。
但是,如果要在上述日期中进行一些混乱的调整并计算出跨越年份边界的当地日期之间的差异天数。
因此,我试图使用ordinality(of: .day, in: .era, for: date)
来进行计算。
但是,无论用于计算的日历的时区如何,基于日历时代的计算都会给出相同的值。
这是为什么?
这将是一个简单的计算两个日期之间的日历天数的差异在不同的本地时间开发区明示的方式?就像我所说的那样,我的计算一天中的日期的代码需要添加额外的逻辑来处理跨越日历年边界的日期。
请注意,这是一个不同于“两日期之间有多少天差异”的问题。在我的问题中,我希望两个日期能够在不同的当地时区表示,我对每个日期值的日历日期的差异感兴趣。
马丁的关于日历计算评论超过长间隔给人意想不到的效果一样好一个答案,任何,为什么它不工作。
我没有拿出计算日历日期值2日期间在特定时间段所表达的期望差代码:
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
首先,我用2个日期转换为月/日/年DateComponents
值日历设置为其特定时区。
然后我使用日历功能dateComponents(_:from:to:)
,它可以让你计算出2个值之间的差值,无论你想用什么单位来比较它们。 (在这种情况下,天数)
“这需要一堆混乱的调整”等等 - 为什么会这样?计算最初在不同时区表示的两个日期之间的差异很容易,因为无论_original_时区如何,NSDate_itself_都是绝对的。 – matt
*“两个日期之间的日历天数之差是多少?当在不同的本地时间区域中表示时”*是指什么? NSDate是绝对的时间点(正如马特所说的)。 “两个日期之间的天数”是指*特定*日历和时区。 –
“long”间隔内的日历计算可能会产生意想不到的结果,请参阅http:// stackoverflow。另一个例子是com/q/41860009/1187415。在你的情况下,'DateComponents(calendar:...,era:1).date!'返回“0001-01-01 04:56:02 +0000”为NY日历和“0000-12-31 12:20 :56 +0000“为新西兰日历,即差异不只是时区的差异。 - 我*猜测*是“时代的天数”没有给出明智的结果。 –