0

Cookie の有効期限の文字列を作成する C++ コードがあります (次のようなもの: "Thu, 31-Dec-2037 22:00:00 GMT")「今」から 90 である必要があります。これは私のコードです:

    ptime toDay(second_clock::universal_time());
    toDay += days(90);
    date d = toDay.date();
    string dayOfWeek = d.day_of_week().as_short_string();
    int dayOfMonth = d.day();
    string month = d.month().as_short_string();
    int year = (int)toDay.date().year();

    stringstream strs;
    strs << dayOfWeek << ", " << std::setfill('0') << std::setw(2) << dayOfMonth << "-" << month << "-" << year << " " << toDay.time_of_day() << " GMT";

    string defaultExpiration = strs.str();

このコードのパフォーマンスは本当に悪いですstringstream
より高速な代替手段があれば、喜んでテストします。
ありがとう !

4

2 に答える 2

1

Boostを使用しているので、date_time入出力システムを試してみるべきだと思います。指定したレイアウトで日付と時刻を自動的にフォーマットします。ここでは、そのブーストチュートリアルを見ることができます。

基本的に、あなたはあなたが望むフォーマットで時間出力のためのブーストファセットをセットアップする必要があります-多くのフォーマット指定子があり、あなたがそれを理解すると確信しています。

これによってパフォーマンスが向上するかどうかはわかりませんが、試してみる価値はあると思います。結局のところ、それがそのサブシステムの目的です-日付と時刻を出力することです。

于 2012-08-23T05:28:15.630 に答える
0

FastFormatを使用してそれを行うための非常に高速な方法を見つけました。これで、次のようになります。

ptime today(second_clock::universal_time());
today += days(90);
date d = today.date();
int dayOfMonth = d.day();
int hoursOfDay = today.time_of_day().hours();
int minutesOfDay = today.time_of_day().minutes();

//this function if from "FastFormat"
string defaultExpiration(StringFormatter::Format("{0}, {1}{2}-{3}-{4} {5}{6}:{7}{8}:00 GMT",
    d.day_of_week().as_short_string(),
    dayOfMonth < 10 ? "0" : "",
    dayOfMonth,
    d.month().as_short_string(),
    (int)d.year(),
    hoursOfDay < 10 ? "0" : "",
    hoursOfDay,
    minutesOfDay < 10 ? "0" : "",
    minutesOfDay
    ));
于 2012-08-23T10:50:18.460 に答える