2017-09-04 10 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; 

가 어떻게 유닉스 타임 스탬프로 이러한 변환 할 수 있습니다 ? unsigned char이 값을 표현하는 적절한 방법인지 확실하지 않습니다. 각 값은 1byte 크기 여야합니다.

+3

'unsigned char year = 99;는 2099 또는 1999를 의미합니까? –

+1

현재 시간과 미래 시간 만 필요합니다. 그래서 2099 년을 의미합니다. 일반적으로'year + 2000' – sukovanej

+2

질문을 편집하고 그 내용을 명확히하십시오. –

답변

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입니다.