2017-09-04 12 views
0

Ich weiß, dass diese WerteC++ konvertieren Datetime Zeitstempel

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; 

Wie kann ich diese in Unix-Zeitstempel umwandeln? Ich bin mir nicht sicher, ob der unsigned char die richtige Art ist, den Wert darzustellen, ich brauche nur jeden Wert, der eine Größe von 1 Byte hat.

+3

Wenn Sie haben unsigned Char Jahr = 99; bedeutet dies 2099 oder 1999? –

+1

Ich brauche nur Gegenwart und Zukunft. Also bedeutet es 2099, allgemein 'Jahr + 2000' – sukovanej

+2

Bitte [bearbeiten] Sie Ihre Frage und machen Sie das klar _there_. –

Antwort

2

Ubervan beantwortet Ihre Frage

das Datum Break down in seine Bestandteile d Tag, Monat, Jahr, dann:

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 kann nun zu einem time_t umgewandelt werden und manipuliert werden.

Ihr Problem wird auch angesprochen here.

+0

Vielleicht sollten Sie Ihre vollständige Antwort hier eingeben. Links könnten sterben. – sabsab

0

Das ist, wie ich tun würde es ein wenig mehr von c umarmen ++ 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

Vielleicht ist die einfachste und leistungsstärkste Art und Weise ist Howard Hinnant's free, open-source, header-only datetime library zu verwenden:

#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'; 
} 

Diese Ausgänge:

1503671034 

Diese Bibliothek erweitert die <chrono> Bibliothek, um kalendarische Daten zu verarbeiten Berechnungen und ist even being proposed for standardization.

Verwandte Themen