2012-02-12 2 views
2

Я вношу изменения в существующую многоплатформенную библиотеку. В настоящее время библиотека использует time_t и time(NULL) для хранения «временных меток» важных событий, но разрешения секунд уже недостаточно. Библиотека уже использует Boost для разных вещей, поэтому я смотрел на преобразование всех временных меток time_t в один из объектов Boost.Date_Time.C++: Должен ли я использовать Boost.Date_Time Posix Time или Local Time?

Но я немного смущен между «Posix Time» и «Local Time». Разница заключается только в том, что Local Time также включает часовой пояс? Кажется, что объект ptime может быть преобразован в объект local_date_time, предоставив часовой пояс для использования.

Я правильно понял, что должен использовать ptime для хранения временных меток, и пусть клиенты/звонящие сами решат, хотят ли они конвертировать в local_date_time, если они этого требуют?

ответ

4

Короткий ответ:

Да, повышение PTIME будет ближайший эквивалент time_t; оба являются секундами с момента Epoch/начала записанного времени вида представления. И Boost ptime можно свободно конвертировать в Boost local_date_time с учетом часового пояса.

Обычное использование будет хранить универсальную метку времени и преобразовать ее в локально значимое время для отображения по требованию. Таким образом,

Сервер восточного побережья может записать какое-то событие в указанное время 2012-02-12 17:05 EST, которое переводится во внутреннее представление prime/time_t секунд с момента Epoch как 2012-02-13 00: 05 UTC и поместить это в базу данных. Тогда клиент из Парижа может конвертироваться в local_date_time/struct tm в 2012-02-13 01:05 CET и клиенту Сан-Франциско до 2012-02-12 13:05 PST.

Более длинный ответ: (Вероятно, не имеет отношения к вашему приложению, которое уже стандартизирована на time_t)

Но в некоторых случаях, вы можете хранить местное время даты непосредственно если географический компонент имеет некоторый смысл. Вы можете представить себе множество источников событий по всему миру, и может быть интересно узнать, являются ли эти события дневными или ночными по местному времени. Вы можете восстановить это 1 из 2 способов. Либо хранить локальную дату/структуру tm напрямую/или другой тип смещения даты/времени/времени, который сохраняет исходный часовой пояс и местное время, например. 14:00 PST (дневное) или 03:05 CET (в ночное время).

Или сохраните событие с некоторыми ссылками на исходный источник, чтобы часовой пояс можно было восстановить. Но при обслуживании, которое может удалить источник или отсутствие какого-либо простого соединения, часто бывает проще, чем пытаться перестроить любую географическую информацию, которую можно было бы вернуть обратно в часовой пояс.

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

  • Нет связанных вопросов^_^