DayInEra 的计算与 DayInYear 不一致

Calculation of DayInEra inconsistent with DayInYear

如果我在深夜约会并且我住在美国东海岸,我的 DayInEra 计算似乎不包括时区偏移。但是我的 DayInYear 计算工作正常。

我将以下内容放在 playground 中以将问题与我的代码隔离开来:

var dateLastNite : NSDate = NSDate(timeIntervalSince1970: 1430190884.0)
var dateMorning : NSDate = NSDate(timeIntervalSince1970: 1430224884.0)
var dateEvening : NSDate = NSDate(timeIntervalSince1970: 1430276884.0)

var curCal : NSCalendar = NSCalendar.currentCalendar()
var tz : NSString = curCal.timeZone.abbreviation!

var dayOfYearPast : NSInteger = curCal.ordinalityOfUnit(NSCalendarUnit.CalendarUnitDay, inUnit: NSCalendarUnit.CalendarUnitYear, forDate: dateLastNite)
var dayOfYearAM   : NSInteger = curCal.ordinalityOfUnit(NSCalendarUnit.CalendarUnitDay, inUnit: NSCalendarUnit.CalendarUnitYear, forDate: dateMorning)
var dayOfYearPM   : NSInteger = curCal.ordinalityOfUnit(NSCalendarUnit.CalendarUnitDay, inUnit: NSCalendarUnit.CalendarUnitYear, forDate: dateEvening)

var dayOfEraPast : NSInteger = curCal.ordinalityOfUnit(NSCalendarUnit.CalendarUnitDay, inUnit: NSCalendarUnit.CalendarUnitEra, forDate: dateLastNite)
var dayOfEraAM   : NSInteger = curCal.ordinalityOfUnit(NSCalendarUnit.CalendarUnitDay, inUnit: NSCalendarUnit.CalendarUnitEra, forDate: dateMorning)
var dayOfEraPM   : NSInteger = curCal.ordinalityOfUnit(NSCalendarUnit.CalendarUnitDay, inUnit: NSCalendarUnit.CalendarUnitEra, forDate: dateEvening)

DayOfYearPast 结果是 117,AM 和 PM 都是 118

但是对于 DayOfEraPast 和 dayOfEraAM 我得到 735716 DayOfEraPM 我得到 735717

为什么时代结果不是的任何解释: 735716 735717 735717 正如我所料

使用纪元位时,纪元基于绝对时间(JC 出生时)。您的本地时钟从 dateLastNite 到 dateMorning 过了午夜这一事实并不能保证该时刻通过了 24 小时交叉(作为时代开始时的计算机)。

参见清单 13 和 14:

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtCalendricalCalculations.html