2015-05-08 2 views
1

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

2015-05-08 11: 49: 07,890992700 -0400

Основываясь на documentation, что должно быть возможным с помощью 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 по восточному поясному времени

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

ответ

0

Формат 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. 
+0

Это действительно system_clock :: сейчас() и not system_time :: now(), спасибо за замедление, я исправил его в вопрос. – NapOli1084

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

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