Подтвердить что ты не робот

Вывод даты и времени на С++ с использованием std:: chrono

Я обновляю старый код и, когда это возможно, пытаюсь обновить до С++ 11. Следующий код - это то, как я использовал для отображения времени и даты в моей программе

#include <iostream>
#include <string>
#include <stdio.h>
#include <time.h>

const std::string return_current_time_and_date() const
{
    time_t now = time(0);
    struct tm tstruct;
    char buf[80];
    tstruct = *localtime(&now);
    strftime(buf, sizeof(buf), "%Y-%m-%d %X", &tstruct);
    return buf;
}

Я хотел бы выводить текущее время и дату в аналогичном формате, используя std:: chrono (или аналогичный), но я не уверен, как это сделать. Любая помощь будет принята с благодарностью. Благодаря

4b9b3361

Ответ 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 действителен только для функций-членов, и эта функция не обязательно должна быть членом.