Быстрые даты эквивалентны до 30 наносекунд

Я заметил, что при сравнении двух экземпляров Swift Date с == они относятся к той же дате, когда разница в DateComponents.nanoseconds меньше 30. Например:

 let calendar = Calendar(identifier: .gregorian) let startComps = DateComponents(year: 2017, month: 1, day: 1, hour: 0, minute: 0, second: 0, nanosecond: 0) let endComps = DateComponents(year: 2017, month: 1, day: 1, hour: 0, minute: 0, second: 0, nanosecond: 29) let startDate = calendar.date(from: startComps)! let endDate = calendar.date(from: endComps)! print(startDate == endDate) //prints true, changing 29 to 30 prints false 

Поведение такое же, если сравнивать с startDate.compare(endDate) == .orderedSame . Я не мог найти упоминания об этом в документах или заголовках. Существует ли логическая причина для 30 наносекунд, чтобы быть обрезанием для равенства?

One Solution collect form web for “Быстрые даты эквивалентны до 30 наносекунд”

Даты представлены внутренне как Double . Double с ограниченной точностью. Ваша первая дата имеет внутреннее значение 504950400.000000000000000 (при печати в 504950400.000000000000000 после запятой). Следующим более высоким представляемым значением является 504950400.000000059604645 . Так получилось, что ваша конечная дата, если вы установите для наносекунд 30 , составляет 504950400.000000059604645 (что фактически соответствует значению наносекунд 59 ).

То есть в январе 2017 года Date может различать только 59-наносекундные интервалы. Между тем в январе 2001 года Date может различать каждую наносекунду. А в 2027 году он будет различать 119-наносекундные интервалы.

  • Сортировка NSDates
  • Использование NSDate в NSPredicate
  • Уведомление в Swift каждый день в установленное время?
  • NSDate нулевой час минут и секунд
  • Как получить часы, минуты и am / pm с даты?
  • Как автоматически генерировать подклассы NSManagedObject с атрибутом даты как Date вместо NSDate?
  • Как программно создавать NSArray локализованных имен календаря?
  • Получить формат даты пользователя? (DMY, MDY, YMD)
  • Сортировка массива по дате с использованием только времени?
  • UIDatePicker минус точное время - Swift
  • Как получить «n» день недели с даты
  • Interesting Posts

    Youtube API v3, Недопустимая проблема при воспроизведении видео

    Выделение памяти для данных, используемых MTLBuffer в iOS Metal

    Как предотвратить перенаправление 301 перенаправления ответа из кэша, не отключая перенаправление по умолчанию?

    Универсальное приложение iOS сбой на iPhone / iTouch 3.1.3 из-за UIPopoverController

    Как получить поле Expiry из объекта (Java) Date для отправки в Apple Push Notification Services?

    Сбой приложения iOS при обновлении

    Можно ли подключить несколько экземпляров NSPsistentStoreCoordinator к одному и тому же основному хранилищу SQLite?

    cordova run ios –device не запускает приложение к устройству

    Можно ли использовать клавиатуру предупреждения для любого текстового поля в iOS?

    Запись XML-файла в iOS с помощью Unity (с использованием C #)

    CoreText: Недопустимая поднабор «kern» в CTFont

    iPad IOS html выбор формы не открывается при касании

    Можно ли приостановить UIDynamicAnimator без удаления и добавления UIDynamicBehaviours?

    Кнопка в ContentView вызывает сбой во время выполнения MonoTouch. Ошибка в Monotouch 4.0?

    Как использовать @protocol в приложении AppDelegate для iPhone?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.