2017-09-04 76 views
0

我知道这些值C++转换日期时间到时间戳

unsigned char year = 17; // means 2017 
unsigned char month = 8; 
unsigned char day = 25; 
unsigned char hour = 14; 
unsigned char minute = 23; 
unsigned char second = 54; 

我如何可以转换到这些UNIX时间戳?我不确定unsigned char是否是表示值的正确方法,我只需要每个值都是1byte的大小。

+3

如果你有'unsigned char year = 99;'是否意味着2099或1999? –

+1

我只需要现在和将来的时间。所以这意味着2099,通常是“年+ 2000” – sukovanej

+2

请[编辑]你的问题,并明确_there_。 –

回答

2

Ubervan回答了你的问题

向下打破的日期为它的组件,即一天,一个月,一年,然后:

struct tm tm; 
time_t rawtime; 
time (&rawtime); 
tm = *localtime (&rawtime); 
tm.tm_year = year - 1900; 
tm.tm_mon = month - 1; 
tm.tm_mday = day; 
mktime(&tm); 

TM现在可以转换为time_t的和被操纵。

您的问题也解决here

+0

也许您应该在此处填写完整答案。链接可能会死亡。 – sabsab

0

这就是我会做它拥抱多一点的C++ 11

std::string timepointToString(std::chrono::system_clock::time_point const& t) { 
    time_t tt = std::chrono::system_clock::to_time_t(t); 
    struct tm tb; 
    size_t const len(21); 
    char buffer[len]; 
    TRI_gmtime(tt, &tb); 
    ::strftime(buffer, sizeof(buffer), "%Y-%m-%dT%H:%M:%SZ", &tb); 
    return std::string(buffer, len - 1); 
} 

std::chrono::system_clock::time_point stringToTimepoint(std::string const& s) { 
    if (!s.empty()) { 
    try { 
     std::tm tt; 
     tt.tm_year = std::stoi(s.substr(0, 4)) - 1900; 
     tt.tm_mon = std::stoi(s.substr(5, 2)) - 1; 
     tt.tm_mday = std::stoi(s.substr(8, 2)); 
     tt.tm_hour = std::stoi(s.substr(11, 2)); 
     tt.tm_min = std::stoi(s.substr(14, 2)); 
     tt.tm_sec = std::stoi(s.substr(17, 2)); 
     tt.tm_isdst = 0; 
     auto time_c = TRI_timegm(&tt); 
     return std::chrono::system_clock::from_time_t(time_c); 
    } catch (...) {} 
    } 
    return std::chrono::time_point<std::chrono::system_clock>(); 
} 
1

也许最简单的和最高性能的方法是使用Howard Hinnant's free, open-source, header-only datetime library

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

date::sys_seconds 
to_sys_time(unsigned char y, unsigned char m, unsigned char d, 
      unsigned char h, unsigned char M, unsigned char s) 
{ 
    using namespace date; 
    using namespace std::chrono; 
    return sys_days{year{y+2000}/m/d} + hours{h} + minutes{M} + seconds{s}; 
} 

int 
main() 
{ 
    std::cout << to_sys_time(17, 9, 25, 14, 23, 54).time_since_epoch().count() << '\n'; 
} 

此输出:

1503671034 

此库扩展了<chrono>库以处理日历计算,并且是even being proposed for standardization