Увеличение вывода :: chrono :: system_clock :: time_point как местное время относительно UTC

Я пытаюсь вывести boost :: chrono :: system_clock :: time_point в файловый поток, чтобы он отображал местное время, но с разницей во времени UTC, например:

2015-05-08 11:49:07.890992700 -0400

На основе заголовка документация, что должно быть возможно при использовании манипулятора time_fmt с местным часовым поясом:

std::ofstream file("MyFile.txt");
boost::chrono::system_clock::time_point timePoint = boost::chrono::system_clock::now();
file << boost::chrono::time_fmt(boost::chrono::timezone::local)
     << timePoint;

Однако результат, который я получаю:

2015-05-08 11:49: 07.890992700 Восточное летнее время

По сути, я бы хотел, чтобы строка часового пояса «Eastern Daylight Time» была заменена на разницу часового пояса «-0400» относительно UTC. Предполагаю, что результат может зависеть от локальных настроек системы. Есть ли способ добиться этого независимо от настроек системы?


person NapOli1084    schedule 08.05.2015    source источник


Ответы (1)


AFAIK формат + HHMM известен как часовые пояса POSIX.

FWIW Я думаю, вы имеете в виду system_clock::now(), и вот несколько тестов в моей системе:

$ TZ='Asia/Kathmandu' ./test
2015-05-10 04:46:40.655817854 +0545

$ TZ='America/Detroit' ./test
2015-05-09 18:59:57.022323975 -0400

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

Также см. Live On Coliru

//#include <boost/chrono/chrono_io.hpp>
#include <boost/chrono/time_point.hpp>
#include <boost/chrono/io/time_point_io.hpp>
#include <boost/chrono/chrono.hpp>
#include <iostream>

int main() {
    boost::chrono::system_clock::time_point timePoint = boost::chrono::system_clock::now();
    std::cout
        << boost::chrono::time_fmt(boost::chrono::timezone::local)
        << timePoint
        << "\n";
}

[1] Я понял это с помощью tzselect:

The following information has been given:

    United States
    Eastern Time - Michigan - most locations

Therefore TZ='America/Detroit' will be used.
Local time is now:  za mei  9 18:59:38 EDT 2015.
Universal Time is now:  za mei  9 22:59:38 UTC 2015.
person sehe    schedule 09.05.2015
comment
Это действительно system_clock :: now (), а не system_time :: now (), спасибо, что заметили, я исправил это в вопросе. - person NapOli1084; 11.05.2015