Ответ 1
Библиотека <chrono>
использует только время, а не даты, за исключением system_clock
, которая имеет возможность конвертировать свои точки времени в time_t
. Поэтому использование <chrono>
для дат не сильно улучшит ситуацию. Надеюсь, мы получим что-то вроде chrono::date
в недалеком будущем.
Тем не менее, вы можете использовать <chrono>
следующим образом:
#include <chrono> // chrono::system_clock
#include <ctime> // localtime
#include <sstream> // stringstream
#include <iomanip> // put_time
#include <string> // string
std::string return_current_time_and_date()
{
auto now = std::chrono::system_clock::now();
auto in_time_t = std::chrono::system_clock::to_time_t(now);
std::stringstream ss;
ss << std::put_time(std::localtime(&in_time_t), "%Y-%m-%d %X");
return ss.str();
}
Обратите внимание, что std::localtime
может вызвать расы данных. localtime_r
или аналогичные функции могут быть доступны на ваших платформах.
Update:
С помощью новой версии Howard Hinnant библиотеки дат вы можете написать:
#include "date.h"
#include <chrono>
#include <string>
#include <sstream>
std::string return_current_time_and_date() {
auto now = std::chrono::system_clock::now();
auto today = date::floor<days>(now);
std::stringstream ss;
ss << today << ' ' << date::make_time(now - today) << " UTC";
return ss.str();
}
Это напечатает что-то вроде "2015-07-24 05: 15: 34.043473124 UTC".
В несвязанной заметке возвращение объектов const
стало нежелательным с С++ 11; Невозможно перенести значения константы. Я также удалил trailing const, потому что trailing const действителен только для функций-членов, и эта функция не обязательно должна быть членом.