Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Problem z struct * tm do time_t

Ostatnio zmodyfikowano 2014-04-04 19:03
Autor Wiadomość
00Andre
Temat założony przez niniejszego użytkownika
[C++] Problem z struct * tm do time_t
» 2014-04-03 13:17:58
Siemka ;D

Mam kolejny mały problem, więc mam problem z przerobieniem  strukturę tm do time_t

Szukałem w internecie informacji o tym, i znalazłem , aby to wykonać za pomocą funkcji mktime

Znalazłem też przykład jak to wykonać i zrobiłem swoją wersje tego i nie działa.

Zmienne są przed tym ustawione i wiadome więc z tym nie ma problemu !

Oto kod z tym użyciem :

C/C++
time( & element.czas_wyczytany );
element.struktura_wyczytana = localtime( & element.czas_wyczytany );
element.struktura_wyczytana->tm_wday = element.dzien_tygodnia; // 0
element.struktura_wyczytana->tm_mon = element.miesiac + 1; // 3
element.struktura_wyczytana->tm_mday = element.dzien_miesiaca + 1; // 12
element.struktura_wyczytana->tm_hour = element.godzina + 1; // 7
element.struktura_wyczytana->tm_min = element.minuty; // 23
element.struktura_wyczytana->tm_sec = element.sekundy; // 54
element.struktura_wyczytana->tm_year = element.rok; // 2014

mktime( element.struktura_wyczytana );

cout << ctime( & element.czas_wyczytany )

A wynik jest tego, że data wpisana w strukturę nie jest taka sama jak ma być

 Wed Apr 02 13:14:05 2014

 // A ma byc
 Mon Mar 12 07:07:54 2014

00Andre
P-107643
Adik80
» 2014-04-03 14:43:12
moze powinienes wynik z mktime zapamietac i uzyc jako prametr w ctime
P-107649
00Andre
Temat założony przez niniejszego użytkownika
» 2014-04-03 23:17:13
Spróbowałem zrobić jak mówiłeś tak
C/C++
time_t czas;

czas = mktime( element.struktura_wyczytana );

cout << ctime( & czas );

Po skomplikowaniu kodu nie wyświetla nic.

Edit. A wpisanie jako parametr do ctime
mktime( element.struktura_wyczytana )
 pokazuje błąd, 

error: invalid conversion from 'time_t {aka long int}' to 'const time_t* {aka const long int*}' [-fpermissive]|

00Andre
P-107672
pekfos
» 2014-04-04 08:57:01
Nie nazywaj zmiennych podobnie, jeśli robi to problemy. Jak widać - robi. Ogólnie ten kod robi jedno wielkie nic. Wywal go, przeczytaj, jak działają użyte tam funkcje, i napisz go od nowa.
C/C++
time( & element.czas_wyczytany );
/*
element.struktura_wyczytana = localtime( & element.czas_wyczytany );
element.struktura_wyczytana->tm_wday = element.dzien_tygodnia; // 0
element.struktura_wyczytana->tm_mon = element.miesiac + 1; // 3
element.struktura_wyczytana->tm_mday = element.dzien_miesiaca + 1; // 12
element.struktura_wyczytana->tm_hour = element.godzina + 1; // 7
element.struktura_wyczytana->tm_min = element.minuty; // 23
element.struktura_wyczytana->tm_sec = element.sekundy; // 54
element.struktura_wyczytana->tm_year = element.rok; // 2014

mktime( element.struktura_wyczytana ); */

cout << ctime( & element.czas_wyczytany )
Można wywalić większość tego kodu i nic się nie stanie..
P-107675
Adik80
» 2014-04-04 11:17:14
skoro ctime nic nie wypisuje tzn ze mktime nie dalo rady przkonwertowac daty, czyli masz smieci w tm
P-107680
00Andre
Temat założony przez niniejszego użytkownika
» 2014-04-04 11:39:03
Pekfos Mi bardzo ułatwia nazywanie zmiennych dokładnie, i mi to nie robi żadnego problemu ;D Druga sprawa robiłem tak samo jak był przykład z strony http://www.cplusplus.com​/reference/ctime/mktime/. Po trzecie datę muszę wyczytać z pliku, a to jest w stringu i program analizuje i wyczytuje dane z stringa i potem chce wypełnić strukturę tm danymi wyczytanymi z string'a i ustawić do time_t.  A inaczej nie można wypełnić strukturę tm oprócz mktime i przykładem z strony.
Adik80 Nie mam żadnych śmieci ustawionych. są to normalne ustawione zmienne int. I w ogóle nie przekraczają żadnych zakresów wartości dla danej zmiennej struktury.

00Andre

Ps Wyczytanie i analizowanie stringa z datą mam zrobione i wartości wszystko są dobrze, jedynie są problemy z strukturą tm przerobić do time_t.

Edit Ten kod co uważasz za nie potrzebny musi być, robiłem jak na przykładzie, i ten kod przypisuje wyczytane wartości z string'a i ustawione do int w daną zmienną struktury.

Edit Nazwałem
time_t czas_wyczytany
 Ponieważ wyczytuje z string'a datę i chce potem strukturę tm wypełnioną przerobić na time_t. A ten czas_wyczytany chce potem używać w projekcie.
P-107682
Adik80
» 2014-04-04 12:19:33
Zobacz sobie pod debugerem jakie maasz wartosci w tm, bo dla poprawnych wartosci to poiwnno zadizialac:
C/C++
int main()
{
    tm stm = { 54, 07, 07, 12, 2, 114 };
    time_t tim = mktime( & stm );
    std::cout << ctime( & tim );
    return 0;
}
P-107683
00Andre
Temat założony przez niniejszego użytkownika
» 2014-04-04 18:42:55
Działa twój sposób Adik80, w moim co miałem przepisać to też działał, ale źle miałem rok przypisany. Miałem 2014 zamiast 114. W kursach nigdzie nie piszę , aby tak zapisywać roku jak ty napisałeś w swoim przykładzie.

Będziesz napisany w programie ;)

00Andre
P-107695
« 1 » 2
  Strona 1 z 2 Następna strona