Как создать собственный формататор boost :: posix_time to_string? - PullRequest
0 голосов
/ 22 августа 2011

В настоящее время я должен использовать такие вещи, как

ptime t = from_time_t(last_write_time(p));
std::string Created = boost::posix_time::to_iso_extended_string(t) ;

или

ptime t = from_time_t(last_write_time(p));
std::ostringstream formatter;
formatter.imbue(std::locale(std::cout.getloc(), new boost::posix_time::time_facet("%a, %d %b %Y %H:%M:%S GMT")));
formatter << t;
std::string Created = formatter.str();

первый - быстрый, но не совместимый с тем, что браузеры хотят использовать в качестве формата времени заголовка, второй - слишком медленный. Поэтому я задаюсь вопросом - как создать быстрый, но эффективный форматер ptime в строку, который бы преобразовал ptime в формат "%a, %d %b %Y %H:%M:%S GMT" и не использовал бы ostringstream и .str() (потому что они слишком медленные для моей цели)?

1 Ответ

1 голос
/ 22 августа 2011

Я всегда плачу от использования sprintf, но что-то не так с этим?

char buffer[...];
sprintf(buffer, "%s, %d %s %04d %02d:%02d:%02d GMT", t ...);
std::string Create(buffer);

Я не знаю подробностей о типе ptime, поэтому я не знаю, насколько большим вам нужно было бы сделать буфер безопасным, или что бы вы указали в качестве аргументов для sprintf, но, без сомнения, вы можете заполните детали.

Существует также функция C strftime, которая может вас заинтересовать, http://www.cplusplus.com/reference/clibrary/ctime/strftime/

...