2009-10-30 13 views
24

Czy C++ ma standardową klasę czasu? Czy muszę przekonwertować na ciąg znaków c przed napisaniem do strumienia. Przykład chcę wyjścia aktualną datę/czas, aby strumień wyrażenie:Czy istnieje standardowa klasa daty/czasu w C++?

 
time_t tm(); 
ostringstream sout; 
sout << tm << ends; 

w tym przypadku uzyskać bieżącą datę/czas pisemnej jako liczbę bez jakiegokolwiek formatowania. Mogę użyć c-funkcje wykonawcze strftime formatować tm pierwszy, ale to wydaje się, że nie powinno być konieczne, jeśli STL ma klasę czasu, który może być instancja od wartości time_t

+2

Istnieje teraz propozycja pełnej i nowoczesnej daty/czasu/strefy czasu C++ przed komisją: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0355r1.html . Ta propozycja jest oparta na tym repozytorium github: https://github.com/HowardHinnant/date, które ma pełną implementację, pełną dokumentację i aktywną społeczność użytkowników. –

Odpowiedz

4

Istnieje również ctime (& time_t) metoda, która wyprowadza łańcuch znaków (char *).

+1

Które nie jest dokładnie pomocne, chyba że * dokładnie * ten format daty/czasu. Patrzenie na to tylko sprawia, że ​​się trzęsę; Nie sądzę, że kiedykolwiek chciałbym to zobaczyć w aplikacji. – Joey

21

Nie jest częścią STL, ale dobrze znana biblioteka to zwiększenie.

Chciałbym pójść drogą korzystania z boost::date. Oto kilka przykładów: http://www.boost.org/doc/libs/1_55_0/doc/html/date_time/date_time_io.html#date_time.io_tutorial.

Jeśli jeszcze nie próbowałaś pobudzać, zachęcam cię do tego, ponieważ oszczędza ci to wielu nieprzyjemnych problemów, ponieważ maskuje większość zależnych od systemu operacyjnego rzeczy, na przykład wątkowanie. Wiele rzeczy w boost to tylko nagłówki (biblioteki szablonów). Jednak datetime wymaga lib lub dll.

13

nitpicking: STL jest średnia Szablon oferty biblioteka z generycznego pojemnika i algorytmów itp i jest mało prawdopodobne, aby włączyć zajęcia dla obsługi data i kalkulacji nawet w przyszłości ...

C++ Standardowa biblioteka sama zawiera STL i poprzednia wersja biblioteki standardowej C. Ten ostatni oferuje niektóre funkcje związane z datą i czasem za pośrednictwem #include <ctime>, o czym już wspomniano powyżej.

Jeśli owijanie (lub po prostu użycie) tych funkcji jest wystarczające (i szybsze) niż wciągnięcie boost, przejdź do nich. Nie ma w nich nic złego.

4

OK. Oto najbliżej znalazłem informacje bezpośrednio pisząc czasu do strumienia:

time_t t(time(NULL)); // current time 
tm tm(*localtime(&t)); 

std::locale loc(""); // current user locale 
ostringstream sout; 
const std::time_put<TCHAR> &tput = 
    std::use_facet<std::time_put<TCHAR> >(loc); 
tput.put(sout.rdbuf(), sout, _T('\0'), &tm, _T('x')); 
sout << ends; 

CString sTest(sout.str().c_str()); 

Bardzo pomocny przewodnik jest Apache C++ Standardowa biblioteka Reference Guide http://stdcxx.apache.org/doc/stdlibref/time-put.html#sec13

6

Istnieje get_time i put_time w <iomanip> nagłówku (Zgaduję, że przyszedł z C++ 11), który skutecznie wykonuje formatowanie lub parsowanie.

Powiązane problemy