Как отформатировать chrono :: time_point в виде строки - PullRequest
1 голос
/ 26 мая 2019

Мне нужно получить текущую дату и время в c ++.Я могу использовать chrono, чтобы получить system time, но мне также нужно сохранить это в файле json как строку.Кроме того, хронографическое время, которое я попробовал, дает следующий формат:

auto time = std::chrono::system_clock::now();

вывод:

Thu Oct 11 19:10:24 2012

Но мне нужен формат даты и времени в следующем формате:

2016-12-07T00:52:07

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

Ответы [ 2 ]

0 голосов
/ 27 мая 2019
#include <iostream>
#include <chrono>
#include <ctime>

std::string getTimeStr(){
    std::time_t now =     std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());

    std::string s(30, '\0');
    std::strftime(&s[0], s.size(), "%Y-%m-%d %H:%M:%S", std::localtime(&now));
    return s;
}
int main(){

    std::cout<<getTimeStr()<<std::endl;
    return 0;

}
0 голосов
/ 26 мая 2019

Самый простой способ - использовать бесплатную, с открытым исходным кодом, дату только для заголовка Говарда Хиннанта. H :

#include "date/date.h"
#include <iostream>
#include <string>

int
main()
{
    using namespace date;
    using namespace std::chrono;
    auto time = system_clock::now();
    std::string s = format("%FT%T", floor<seconds>(time));
    std::cout << s << '\n';
}

Эта библиотека является прототипом для новых расширений C ++ 20, chrono. Хотя в C ++ 20 детали форматирования могут немного измениться, чтобы привести его в соответствие с ожидаемой библиотекой C ++ 20 fmt.

...