Próbuję wydrukować wzmiankę :: posix_time :: ptime w formacie "RRRR-MM-DD hh: mm: ss.fff" gdzie MM to 2-cyfrowy miesiąc, a fff - 3-cyfrowy millisecond. Przykład: 2011- -14 22:38:40. .Jak zmienić wzmocnienie C++ posix_time :: rozdzielczość ptime na milisekundę?
Używam Zwiększ 1.33.1.
Próbowałem do wywołania API "ptime :: to_simple_string()", ale nie spełnia moje potrzeby: metoda ta drukuje ptime w formacie „RRRR-MMM-DD GG: MM: SS. ffffff "gdzie" MMM "to nazwa miesiąca składająca się z 3 znaków, np." Jan ", a" ffffff "to 6-cyfrowy mikrosekund. NIE tego chcę.
Następnie próbowałem do korzystania z rzeczy time_facet:
ptime my_time(second_clock::local_time());
time_facet<ptime, char> * my_time_facet = new time_facet<ptime, char>();
std::cout.imbue(std::locale(std::locale::classic(), my_time_facet));
std::cout << my_time;
Ale mam wyjścia jak "2011-07-14 22: 38: 40.123000". To też NIE jest tym, czego chcę.
Wygląda jak ptime domyślnie używa mikrosekundy jako rozdzielczości czasu. Ale Po prostu potrzebuję rozdzielczości milisekund. Po pewnym badaniu myślę, że mogą istnieć dwie metody rozwiązania tego problemu::
1). W jakiś sposób mogę zmienić rozdzielczość czasu ptime, aby użyć milisekundy. Znalazłem niektóre klasy enumacji i szablonów związane z rozdzielczością czasu, ale nie wiem, jak z nich korzystać.
2). W jakiś sposób mogę zmienić format aspektu czasu, aby wydrukować tylko milisekundę. Ale oficjalna dokumentacja zdaje się mówić "% F" i "% f", obydwa używają rozdzielczości mikrosekundy.
Preferuję pierwsze rozwiązanie, ale potrzebuję pomocy! Jak mogę uzyskać ciąg ptime w żądanym formacie?
PS:
1). Chociaż próbowałem wyszukać podobne pytanie na tej stronie, ale go nie znajduję. Jeśli znasz to proszę powiedz mi.
2). Dokumentacja "Zwiększenie 1.33.1 Data Godzin" (http://www.boost.org/doc/libs/1_33_1/doc/html/date_time.html) to jedyne odniesienie, które czytałem.
Aktualizacja 07/15/2011:
Po kilku dalszych badań, moja konkluzja jest następująca:
1). Można zmienić rozdzielczość czasu na milisekundę, więc użycie "% f" w time_facet spowoduje wydrukowanie tylko milisekund, zamiast domyślnych mikrosekund. Wydaje się jednak, że musisz zdefiniować cały zestaw własnych klas, w tym your_time_res_traits, your_time_duration, your_time_system_config, your_time_system i your_time. Jest to zdecydowanie zbyt skomplikowane dla mojego problemu.
2). W związku z tym wziąłem pod uwagę sugestię Marka (patrz poniżej), aby usunąć 3 ostatnie znaki po przekształceniu ptime o długości mikrosekundy w ciąg znaków.
Z ciekawości, dlaczego używasz prawie 6 lat starą wersję Boost? – ildjarn
@ildjarn: Oh, ponieważ wersja 1.33.1 jest już w mojej dłoni, więc nie chcę teraz aktualizować do najnowszej wersji. To mi przypomina: Czy w najnowszym Boost jest dobre rozwiązanie, aby rozwiązać mój problem? Hm ... Pójdę i przejrzę do dokumentu .. – yaobin
Obecne wersje Boost.DateTime mają domyślnie rozdzielczość mikrosekundy, która powinna bardziej odpowiadać twoim potrzebom. Ale tak naprawdę, 6 lat to ** starożytny ** w kategoriach C++ - aktualizacja. – ildjarn