2013-03-11 4 views
4

У нас есть специальный класс C++ datetime, который представляет время в количестве секунд, прошедших с эпохи. Это сохраняется как int64. Этот класс предоставляет количество вспомогательных функций для чтения и записи различных типов форматов datetime.Представление дат до эпохи

К сожалению, эта инструкция не подходит к дате до эпохи, поскольку ее методы полагаются на gmtime() и mktime() для многих операций, которые на нашей системе Windows не поддерживают даты до эпохи. Кто-нибудь знает о замене gmtime и mktime, которые поддерживают отрицательные значения в окнах.

Примером этого ограничения является неспособность нашего приложения хранить дни рождения до 1970 года, потому что каждая дата должна использовать этот класс.

Я не понимаю, о чем я прошу, это из-за моих ограниченных знаний о реализации/использовании даты и времени и моего нежелания понять этот огромный класс наследия, поэтому, если вы чувствуете, что этот вопрос может быть обрамлен другим способом или Я мог бы искать что-то другое, не стесняясь предлагать.

+0

Хлор назад вам нужно идти. Возвращение в 1900 году может стать очень сложным. –

+0

Мы не хотим идти за пределы 1900 года, если это решает проблему с меньшим количеством изменений кода. –

ответ

3

Вы можете использовать Boost.DateTime или использовать только Win32 APIs, а не CRT.

Возможно, у вас есть много испытаний перед вами, чтобы гарантировать, что обработка данных не изменится при вашей доработке. Перед началом рефакторинга убедитесь, что у вас есть исчерпывающие модульные тесты для библиотеки.

Если вы считаете, что ваши ценности действительны в разных местах мира, используйте UTC time как свою каноническую форму и переведите в/из местного времени, если необходимо для разумного ввода/отображения.

Смежные вопросы