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:
如果我在深夜约会并且我住在美国东海岸,我的 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: