1

ミリ秒の精度で適切にフォーマットされたタイムスタンプ(わずかに変更されたISO 8601)を取得する必要があります。

また、日付の例は次2011-09-28 13:11:15.237-08:00
のようになります。フォーマットもオーバーライドできる必要があります。

私はいろいろと遊んでいboost::posix_time::microsec_clock::local_time()ますboost::posix_time::time_facetが、タイムスタンプの場合を除いて、これは問題なく機能します。
posix時間にはタイムゾーン情報が含まれていないため、これは不可能です(推測しています)

それで、タイムゾーン情報を含むミリ秒の精度を持つ他に使用できるものはありますか、time_facetそれともタイムゾーンで作業を行うことができますか?

多分私は常にUTCを使うべきですか?

ありがとう

4

1 に答える 1

4

boost::local_time::local_date_time クラスを見てください。タイムゾーンを指定し、ローカルのマイクロ秒クロックを使用して次のように初期化できます

boost::local_time::local_date_time  my_ldt(boost::local_time::local_microsec_clock::local_time(new boost::local_time::posix_time_zone("EST-5EDT,M4.1.0,M10.5.0")));

その後、ファセットを使用して文字列にフォーマットできるはずです。

編集:完全な例:

#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>

#include <boost/date_time/local_time/local_time.hpp>

int main(void)
{
    boost::posix_time::ptime  now = boost::posix_time::second_clock::local_time();
    boost::posix_time::ptime  utc = boost::posix_time::second_clock::universal_time();

    boost::posix_time::time_duration tz_offset = (now - utc);

    std::stringstream   ss;
    boost::local_time::local_time_facet* output_facet = new boost::local_time::local_time_facet();
    ss.imbue(std::locale(std::locale::classic(), output_facet));

    output_facet->format("%H:%M:%S");
    ss.str("");
    ss << tz_offset;

    boost::local_time::time_zone_ptr    zone(new boost::local_time::posix_time_zone(ss.str().c_str()));
    boost::local_time::local_date_time  ldt = boost::local_time::local_microsec_clock::local_time(zone);
    boost::local_time::local_time_facet* output_facet = new boost::local_time::local_time_facet();
    ss.imbue(std::locale(std::locale::classic(), output_facet));
    output_facet->format("%Y-%m-%d %H:%M:%S%f%Q");
    ss.str("");
    ss << ldt;
    std::cout << ss.str() << std::endl; // "2004-02-29 12:34:56.000789-05:00"

    std::cout << "Press return to exit" << std::endl;
    std::string wait_for_line;
    std::getline(std::cin, wait_for_line);

    return (0);
}
于 2011-09-28T20:36:05.347 に答える