Я видел несколько вопросов, которые всплывают вокруг этой темы, но ничего, что вполне соответствует.
Я создаю метку времени как часть первичного ключа. Отметка времени устанавливается с помощью [Дата NSDate] и сохраняется в хранилище SQLite. Когда я заглядываю в магазин, даты имеют полную точность (до 7 знаков после запятой, указывающих точность до 100 наносекунд).
У меня есть службы, работающие на сервере, на который мне нужно отправить данные и получить дату. Процесс отправки сериализует данные, и для отправки даты с необходимой точностью (сохраненной как datetime2 в SQL Server) я использую:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'"];
NSString *stringFromDate = [dateFormat stringFromDate:dateTime];
и наоборот при получении даты с сервера.
Проблема в том, что дата, извлекаемая из хранилища, по какой-то причине ТОЛЬКО с точностью до миллисекунды. Поэтому, если у меня в хранилище есть метка времени как 341196557.808558, извлеките ее в NSDate и затем используйте приведенный выше код для генерации строки, которая читается как «2011-10-24'T'08: 48: 17.8090000».
Это отправляется на сервер, который должным образом сохраняет его с точностью до миллисекунды (потому что это все, что он получает). Когда я затем получаю дату, десериализую ее и пытаюсь использовать предикатную выборку для хранилища, она не возвращает запись, потому что даты не совпадают. Сравнение <или> не сработает, потому что это первичный ключ ... Мне нужно ==
Я бы не отказался от точности до миллисекунды с отметкой времени перед сохранением (если бы я мог разобраться, как), но мне кажется крайне странным, что исходная дата может хранить и сохранять точность в микросекундах, но не сохраняет то же самое точность при получении даты из магазина?
Буду рад любым мыслям об этом, или об этом драгоценном однострочнике, который разберется с этим беспорядком ...