Squeak.ru - шаблоны программирования

Формат даты и времени с дробными секундами в С++

Я хочу отформатировать дату и время в виде строки, используя формат:

20130630-03:11:45.862

Я могу сделать большую часть этого, используя strftime, однако нет четкого способа добиться доли секунды в конце.

Мой текущий код:

time_t rawtime;
time(&rawtime);
tm* timeinfo = localtime(&rawtime);
char buffer[80];
strftime(buffer, 80, "%G%m%d-%I:%M:%S", timeinfo);

Это дает значение без дробной части секунд.

Однако в конечном итоге я просто хочу иметь строковую версию даты в этом формате, и мне все равно, какой API для этого нужен.

Я использую g++ в Linux, если это актуально.

30.06.2013

  • возможный дубликат Как повысить точность (доли секунды) в распечатке текущего времени? 30.06.2013
  • Возможно, но этот ответ не совсем решает проблему Дрю. 30.06.2013
  • Дрю - функции, которые вы используете, имеют разрешение только 1 секунду. Вам нужны библиотечные функции с большим разрешением. 30.06.2013
  • Что ж, если вопрос в том, как мне это сделать с помощью strftime, то ответ - вы не можете. Но он заявил, что ему все равно, какой API для этого нужен. Поэтому я предполагаю, что STL приемлем. Какой менас, ответ, который я связал, вероятно, достаточен для решения его проблемы. @DrewNoakes, пожалуйста, посоветуйте. 30.06.2013
  • да, кажется, что strftime - это только вторая степень детализации ‹вздох› 31.08.2016

Ответы:


1

Если вам не нужен API, вы можете использовать boost ::date_time и это time_facet.

Короткий пример:

// setup facet and zone
// this facet should result like your desired format
std::string facet="%Y%m%d-%H:%M:%s";
std::string zone="UTC+00";

// create a facet
boost::local_time::local_time_facet *time_facet;
time_facet = new boost::local_time::local_time_facet;

// create a stream and imbue the facet
std::stringstream stream(std::stringstream::in | std::stringstream::out);
stream.imbue(std::locale(stream.getloc(), time_facet));

// create zone
boost::local_time::time_zone_ptr time_zone;
time_zone.reset(new boost::local_time::posix_time_zone(zone));

// write local from calculated zone in the given facet to stream
stream << boost::local_time::local_microsec_clock::local_time(time_zone);

// now you can get the string from stream
std::string my_time = stream.str();

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

С помощью фасета вы можете настроить свой формат. %s (маленькая буква s с дробной частью, большая буква S без дробной части) устанавливает секунды с дробной частью. Вы можете прочитать это в документации facet формат.

Часовой пояс предназначен для расчета времени вашего локального компьютера в нужной зоне.

30.06.2013
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...