0

我有一个 c++ 代码,它为 cookie 构建一个过期日期字符串(类似于:) "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 输入/输出系统。它的作用是在您指定的布局中自动格式化日期和时间。在这里你可以看到关于那个的 boost 教程。

基本上,您需要为您想要的格式的时间输出设置一个提升方面 - 有许多格式说明符,我相信您会弄明白的。

我不确定这会带来性能提升,但我相信值得一试。毕竟,这就是该子系统的目的——输出日期和时间。

于 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 回答