2017-09-14 103 views
2
time_t now = time(0); 
std::string h = std::string (ctime (&now)); 

std::cout << "\nh: " << h; 

,我接收电流输出为:Thu Sep 14 10:58:26 2017如何用time_t更改日期和时间的格式?

我想要的输出2017-08-26-16-10-56

我能做些什么来该输出?

+1

相关问题:https://stackoverflow.c OM /问题/ 3673226 /如何对打印时的格式,2009-08-10-181754-811 – rsp

回答

1

使用strftime,像这样:

strftime (buffer, 80,"%Y-%m-%d-%H-%M-%S",timeinfo); 

全码:

#include <cstdio> 
#include <ctime> 

int main() 
{ 
    time_t rawtime; 
    struct tm * timeinfo; 
    char buffer [80]; 

    time (&rawtime); 
    timeinfo = localtime (&rawtime); 

    strftime (buffer, 80,"%Y-%m-%d-%H-%M-%S",timeinfo); 
    puts (buffer); 

    return 0; 
} 

输出:

2017-09-14-14-41-19

2

使用std::put_time

#include <iomanip> 

time_t now = time(0); 
std::string h = std::put_time(localtime(&now), "%F-%H-%M-%S"); 
std::cout << "\nh: " << h; 

输出

H:2017-09-14-05-54-02

更妙的是,使用std::chrono

#include <iostream> 
#include <iomanip> 
#include <chrono> 
using namespace std; 

int main() { 
    auto now = chrono::system_clock::to_time_t(chrono::system_clock::now()); 
    cout << put_time(localtime(&now), "%F-%H-%M-%S") << endl; 
    return 0; 
}