C ++: я должен использовать Boost.Date_Time Posix Time или местное время - PullRequest
2 голосов
/ 13 февраля 2012

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

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

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

1 Ответ

4 голосов
/ 13 февраля 2012

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

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

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

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

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

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

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

...