Расчет DayInEra несовместим с DayInYear
Если у меня свидание поздно вечером, и я живу на восточном побережье США, мои расчеты DayInEra, похоже, не включают смещение часового пояса. Но мой расчет DayInYear работает отлично.
Я поместил следующее на игровой площадке, чтобы изолировать проблему от моего кода:
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, как я ожидал
1 ответ
При использовании бита эры эра основывается на абсолютном моменте времени (когда родился JC). Тот факт, что ваши местные часы прошли полночь от dateLastNite до dateMorning, не гарантирует, что момент времени прошел 24-часовой переход (как компьютер с начала эпохи).
См. Листинг 13 и 14: