boost::time_facet не форматирует время

#c #linux #boost #datetime-format

#c #linux #boost #datetime-форматирование

Вопрос:

Я пытаюсь вывести дату в пользовательском формате. Для Windows это работает нормально, но для Linux — нет.

 int main()
{
   const boost::gregorian::date DATE_EPOCH(1970, 1, 1);
   const boost::posix_time::ptime PTIME_DATE_EPOCH(DATE_EPOCH);

   uint64_t time = 1552575540001;  // 14 Mar 2019 14:59:00.001
   using namespace boost::posix_time;
   const ptime posixTime = ptime(PTIME_DATE_EPOCH.date(), milliseconds(time));

   const std::string mask= "%Y-%m-%dT%H:%M:%SZ";

   std::ostringstream stream;
   stream.imbue(std::locale(stream.getloc(), new time_facet(mask.c_str())));
   stream << posixTime;
   std::string timeStr = stream.str();
   std::cout << timeStr;

   return 0;
}
  

Но вместо этого я получаю 2019-Mar-14 14:59:00.001 2019-03-14T14:59:00.001Z

Не могли бы вы, пожалуйста, помочь мне найти проблему.

Комментарии:

1. Я не получаю ни того, ни другого. Я получаю 2019-03-14T14:59:00Z .

2. Я пробую это в wandbox, и это тоже работает. И я почти уверен, что это работает для многих систем Linux, потому что этот код используется уже несколько лет и проблем еще не было. Но у меня есть тестовый компьютер с Linux, на котором он не работает. Может быть, проблема в самой ОС?

3. Скорее всего, это что-то другое, например, что-то в наборе инструментов. Вы пробовали std::chrono вместо использования boost ?

4. Это работает, но у tm нет миллисекунд, которые мне нужны const std::time_t time = time / 1000; tm local; localtime_r(amp;time, amp;local); // ЗАДАЧА: Проверить ошибки. std::ostringstream oss; oss.imbue(std::locale::classic()); oss << std::put_time(amp;local, маска.c_str( )); вернуть oss.str();

5. Я не думаю, что вы можете получить только миллисекунды. %f это даст вам микросекунды. %s это даст вам секунды микросекунды.