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

[C++]<ctime> formatowanie wydruku; różny czas

Ostatnio zmodyfikowano 2013-02-27 14:02
Autor Wiadomość
naiL
Temat założony przez niniejszego użytkownika
[C++]<ctime> formatowanie wydruku; różny czas
» 2013-02-26 21:37:34
Mam problem. Wojuję z <ctime>, żeby działało jak wydaje mi się, że powinno wg dokumentacji, na tyle ile ją jestem w stanie zrozumieć, uff.
Program docelowo ma być funkcją w innym programie zwracającą string zawierającą datę/godzinę po dodaniu czasu o ilość sekund, tu w próbach o wartość 1234567 (jakieś dwa tygodnie).
Udało mi się "takie coś":
(programik zawiera przerwy w prinf(składnia kopiowana z przykładów) i cout żebym wiedział co on tam kombinuje)
C/C++
#include <iostream>
#include <ctime>
#include <cstdio>
#include <string>
using namespace std;

int main()
{ //ustawiam swój czas, aktualny z zegarka nie jest mi potrzebny
    struct tm czas_s;
    czas_s.tm_sec = 59;
    czas_s.tm_min = 59;
    czas_s.tm_hour = 23;
    czas_s.tm_mday = 26;
    czas_s.tm_mon = 1;
    czas_s.tm_year = 2013 - 1900;
   
    time_t czas = 0;
    czas = mktime( & czas_s );
    cout << "Czas z tm:";
    printf( "%s", ctime( & czas ) );
    cout << endl;
   
    //zwiekszam czas o 1234567 sekund
    czas = czas + 1234567;
    cout << "czas+1234567 sekund  %s" << ctime( & czas ) << endl;
    char bufor[ 80 ];
   
    strftime( bufor, 80, "godzina wyjsciowa to: %H:%M:%S", & czas_s );
    printf( "[Zawartosc bufora]: \"%s\"\n", bufor );
   
    struct tm * aktualnyCzas;
    aktualnyCzas = localtime( & czas ); // zamieniam czas na strukture czasu?
   
    strftime( bufor, 90, "teraz godzina (+1234567 sekund) to: %H:%M:%S", aktualnyCzas );
    printf( "[Zawartosc bufora]: \"%s\"\n", bufor );
    string czas_w_string = "sprawdzam_string:";
    string czas_w = " ";
   
    cout << czas_w_string;
    int i = 0;
    do
    {
        czas_w =( bufor[ i ] );
        czas_w_string += czas_w;
        i++;
       
    } while( bufor[ i ] != '\0' );
   
    cout << czas_w_string;
   
   
    return 0;
}
Ja, mam problemy dwa. Otóż raz wyświetla tak raz tak godzinę "zmejkowaną" z czas_s. Tylko raz uruchomiony program pokazuje 23:59:59 raz 22:59:59. (jakby raz była utc raz lokalna).
Druga sprawa nie mogę sobie poradzić z tymi strftime(...."%Y %h %a-%T", aktualnyCzas s strftime). Drukuje pusty bufor. Jak kopiuj/wklejam %H:%M%S z przykładu ze strony działa. no ale ja chce swoje nie z przykładu.
Madzik, nic nie drukuje czy klawiatura jakaś nie odpowiednia ?
co mam wpisać w
C/C++
strftime( bufor, 90, "teraz godzina (+1234567 sekund) to: %Y %h %a-%X", aktualnyCzas );

 żeby uzyskać Rok(4cyfrowy), miesiąc(3literowy),dzień(skrót) godzina HH:MM:SS? kiełbasi coś i daje 2013 ale reszta to kaszanka.
Co pewnie rozśmieszy, to sposób przepisania bufora do string. no nie znalazłem innego sposobu, jeżeli jest coś konkretniejszego do zamiany char na string(stringstream prawo lewo działał tylko do spacji) proszę o pomoc.
P-77154
Monika90
» 2013-02-27 03:28:02
1. Struktura
tm
 ma składową o nazwie
tm_isdst
, która oznacza czy masz czas zimowy czy letni. Nie inicjalizujesz tej składowej, wiec zawiera śmieci, dlatego raz masz 22:59, a raz 23:59.

2. Założenie, że
time_t
 przechowuje czas w sekundach jest nieuzasadnione.

3. Pewnie biblioteka standardowa, której używasz nie implementuje %h, spróbuj użyć %b.

4. Utworzenie stringa na podstawie bufora jest proste:
C/C++
string czas_w_string( bufor );
P-77195
naiL
Temat założony przez niniejszego użytkownika
» 2013-02-27 14:02:28
1. Rozumiem. Pewnikiem tm_isdst co któreś tam uruchomienie przybierało wartość 0 i problem.
2. Tyle zrozumiałem że zegarek liczy sekundy od początku swojego "istnienia"(nie wiem też czemu różnie 1970 na cplusplus a po próbach wychodziło 1900?)
Założenie jest takie żeby określić na początku datę(z pliku) i do tej daty dodawać "eventy" też z pliku, ale ich występowanie w czasie jest określone w 1/50 sekundy(np czas=czas+3000/50), wynik interesuje mnie tylko całkowity, jest to prosty parser bez wnikania w ułamki sekund. Mam nadzieje, że takie rozwiązanie jest dobre jeżeli chodzi o zwiększanie czasu na zegarze(określonym na początku) o "sekundy" dodawane jak w
3. Koniec końców coś załapało w kompilacji i uzyskałem efekt jaki chciałem :) szkoda że jest to trochę magiczne, że wystarczy przeładować code:bloks i poszło bez problemu.
4. No cóż... uczę się.
Dzięki.
P-77207
« 1 »
  Strona 1 z 1