Я искал Google и StackOverflow и нашел тангенциальные обсуждения, но ничего не касалось этого: существует ли какой-либо стандартный или широко используемый тип С++ для хранения временной метки, соответствующей (местному времени, смещению от UTC)?
Этот формат даты соответствует ISO 8601, System.DateTimeOffset в .NET и TIMESTAMP WITH TIME ZONE в некоторых системах баз данных.
Предпочтительно, я бы надеялся на что-то, что правильно обрабатывает сравнения и дельты и уже имеет преобразование в/из ISO 8601.
Примечания:
Какими бы ни были их преимущества, использование часовых поясов типа POSIX не вариант. Системы, с которыми мы взаимодействуем, используя стандартные интерфейсы медицинской отрасли, предоставляют временные метки либо в виде неопределенного местного времени, либо в виде (местное время, смещение от UTC). Они просто не предоставляют полную информацию о часовом поясе.
Преобразовывать все в UTC тоже не вариант. Местное время, с точки зрения системы, записавшей время, является важной частью информации, которую мы не можем потерять.
time_point в boost и C++11 прекрасен, но я не вижу, как применить его к этой проблеме, по крайней мере, без громоздкого увеличения количества часов (или эпох). Но я открыт для руководства о том, как это может быть.
Запасной вариант — свернуть свой собственный, но я не могу поверить, что мы первые, кто столкнулся с этим вопросом.