Ich führe den folgenden Code aus.Verwirrendes Verhalten der Funktion mktime(): tm_hour count um eins erhöhen
int main()
{
struct tm storage={0,0,0,0,0,0,0,0,0};
char *p = NULL;
p = (char *)strptime("2012-08-25 12:23:12","%Y-%m-%d %H:%M:%S",&storage);
char buff[1024]={0};
strftime(buff,1024,"%Y-%m-%d %H:%M:%S",&storage);
cout << buff << endl;
storage.tm_sec += 20;
strftime(buff,1024,"%Y-%m-%d %H:%M:%S",&storage);
cout << buff << endl;
mktime(&storage);
strftime(buff,1024,"%Y-%m-%d %H:%M:%S",&storage);
cout << buff << endl;
return 0;
}
Wenn oben Programm ausgeführt wird, druckt er '2012-08-25 13.23.32' anstelle von '2012-08-25 00.23.32'. Bitte helfen Sie, warum es tm_hour Wert erhöht. Dies funktioniert korrekt, wenn ich Eingabedatum als '2012-02-25 12:23:32' in Programm, was verwirrend ist.
Ausgabe ->
[[email protected] root]$ ./a.out
2012-08-25 12:23:12
2012-08-25 12:23:32
2012-08-25 13:23:32
[[email protected] root]$
Datum Info auf meinem System ->
[[email protected] root]$ date
Sat Aug 25 08:28:26 EDT 2012
Der Code zeigt nicht, dass die Stunde zunimmt.Zeigen Sie dazu das Ergebnis von 'strptime' sowie das Ergebnis des Aufrufs von' mktime' an. Das wird helfen herauszufinden, was tatsächlich passiert. –
Sorry, ich kann das nicht analysieren. Es hat drei Ausgänge anstelle von einem, aber keinen Hinweis darauf, woher sie kommen. Bitte aktualisieren Sie den Beispielcode, damit er der Ausgabe entspricht. –