2017-12-04 4 views
1

Wie kann ich die Anzahl der Sekunden seit dem 1. Januar übergeben bekommen, 1970 für ein bestimmtes Datum, zum Beispiel: „2017.09.14 23.24.46“Erhalten Epoche Sekunden bestimmtes Datum in C

#include <stdio.h> 
#include <stdint.h> 
#include <time.h> 
int main() 
{ 

    struct tm tmVar; 
    time_t timeVar; 
    sscanf("2017-09-14 23:24:46","%d-%d-%d %d:%d:%d",&tmVar.tm_year 
         ,&tmVar.tm_mon, &tmVar.tm_mday, 
         &tmVar.tm_hour, &tmVar.tm_min, 
         &tmVar.tm_sec); 
    tmVar.tm_isdst = 1; 
    printf("tm_year :%d\n",tmVar.tm_year); 
    printf("tm_month :%d\n",tmVar.tm_mon); 
    printf("tm_day :%d\n",tmVar.tm_mday); 
    printf("tm_hour :%d\n",tmVar.tm_hour); 
    printf("tm_min :%d\n",tmVar.tm_min); 
    printf("tm_sec :%d\n",tmVar.tm_sec); 
    timeVar = mktime(&tmVar); 
    printf("time %d\n",timeVar); 
} 

Der Ausgang ist jedoch nicht das, was ich erwarte:

tm_year: 2017

tm_month: 9

tm_day: 14

tm_hour: 23

tm_min: 24

tm_sec: 46

Zeit 1336625342

Nach epochconverter.com, sollte der richtige Wert 1510529086. Warum sein bin ich diesen Wert nicht zu bekommen?

+0

es die Anzahl der Sekunden –

+0

in Bezug auf mit https://www.epochconverter.com/ dosen't der Ausgabe wiil 1510529086 –

+1

Der portable Weg, dies zu tun ist, um sowohl "time_t" für "2017-09-14 23:24:46" und "time_t" für "1. Januar 1970" zu berechnen und dann 'difftime()' zu verwenden für den Unterschied. – chux

Antwort

2

Sie müssen die in Ihrer Struktur gespeicherten Werte anpassen.

Das Feld tm_year ist Jahre seit 1900, also subtrahieren Sie 1900 von diesem Wert. Das tm_mon Feld ist seit Januar Monate, also subtrahieren Sie 1 von diesem Wert.

So gehen Sie wie folgt nach der Struktur bevölkern:

tmVar.tm_year -= 1900; 
tmVar.tm_mon--; 

Ausgang:

tm_year :117 
tm_month :8 
tm_day :14 
tm_hour :23 
tm_min :24 
tm_sec :46 
time 1505445886 
+0

Das stimmt! Danke! –

+0

@ MiguelÁngelRetamozoSanchez Froh, ich könnte helfen. Fühlen Sie sich frei, [diese Antwort zu akzeptieren] (https://stackoverflow.com/help/accepted-answer), wenn Sie es nützlich fanden. – dbush

+0

natürlich, nochmals vielen Dank! –

Verwandte Themen