Как отформатировать объект даты и времени в формате дд / мм / гггг? - PullRequest
47 голосов
/ 15 декабря 2009

Как можно распечатать текущую дату, используя библиотеки Boost в формате дд / мм / гггг Ч?

Что у меня есть:

boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
cout << boost::posix_time::to_simple_string(now).c_str();

2009-Dec-14 23:31:40

Но я хочу:

14 декабря 2009 г. 23: 31: 40

Ответы [ 2 ]

80 голосов
/ 15 декабря 2009

Если вы используете Boost.Date_Time , это делается с помощью IO-фасетов.

Вам нужно включить boost/date_time/posix_time/posix_time_io.hpp, чтобы получить правильные определения типа фасета (wtime_facet, time_facet и т. Д.) Для boost::posix_time::ptime. Как только это сделано, код довольно прост. Вы вызываете imbue на ostream, на который хотите выводить данные, а затем просто выводите ptime:

#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/posix_time/posix_time_io.hpp>

using namespace boost::posix_time;
using namespace std;

int main(int argc, char **argv) {
  time_facet *facet = new time_facet("%d-%b-%Y %H:%M:%S");
  cout.imbue(locale(cout.getloc(), facet));
  cout << second_clock::local_time() << endl;
}

Выход:

14-Dec-2009 16:13:14

См. Также список флагов формата в документах на повышение, если вы хотите вывести что-то более изумительное.

0 голосов
/ 16 декабря 2018

С библиотекой {fmt} вы можете распечатать дату в требуемом формате следующим образом:

#include <boost/date_time/posix_time/posix_time.hpp>
#include <fmt/time.h>

int main() {
  auto now = boost::posix_time::second_clock::local_time();
  fmt::print("{:%d-%b-%Y %H:%M:%S}\n", to_tm(now));
}

Это средство форматирования предлагается для стандартизации в C ++ 20: P0645 .

В качестве альтернативы вы можете использовать std::put_time, который был представлен в C ++ 11:

#include <boost/date_time/posix_time/posix_time.hpp>
#include <iomanip>
#include <iostream>

int main() {
  boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
  auto tm = to_tm(now);
  std::cout << std::put_time(&tm, "%d-%b-%Y %H:%M:%S");
}

Отказ от ответственности : я являюсь автором {fmt}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...