2017-09-04 53 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