Wykonuję poniższy kod.Mylące zachowanie funkcji mktime(): zwiększenie liczby tm_hour o jeden
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;
}
Jeżeli powyższy program wykonywany, drukuje '25.08.2012 13:23:32' zamiast '2012-08-25 12:23:32'. Proszę pomóż, dlaczego zwiększa wartość tm_hour. Działa to poprawnie, jeśli wprowadzę datę wprowadzenia jako "2012-02-25 12:23:32" w programie, co jest mylące.
wyjście ->
[[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]$
najświeższe informacje na moim systemie ->
[[email protected] root]$ date
Sat Aug 25 08:28:26 EDT 2012
Kod nie pokazuje, że godzina się zwiększa.Aby to zrobić, wyświetl wynik, który pochodzi z 'strptime', a także wynik, który pochodzi z wywołania' mktime'. Pomoże to ustalić, co się właściwie dzieje. –
Przepraszam, nie mogę tego przetworzyć. Ma trzy wyjścia zamiast jednego, ale nie wskazuje, skąd pochodzą. Zaktualizuj przykładowy kod, aby dopasować wynik. –