在C ++中用小数秒格式化日期和时间

时间:2013-06-30 01:17:26

标签: c++ datetime strftime

我想使用以下格式将日期和时间格式化为字符串:

20130630-03:11:45.862

我可以使用strftime完成大部分工作,但是没有明确的方法可以在最后达到小数秒。

我目前的代码是:

time_t rawtime;
time(&rawtime);
tm* timeinfo = localtime(&rawtime);
char buffer[80];
strftime(buffer, 80, "%G%m%d-%I:%M:%S", timeinfo);

这将产生没有小数秒部分的值。

但最终我只想以这种格式获得日期的字符串版本,而不关心它需要什么API。

我在Linux上使用g ++,以防它相关。

1 个答案:

答案 0 :(得分:2)

如果您不关心api,可以使用boost::date_timetime_facet

到目前为止的小例子:

// setup facet and zone
// this facet should result like your desired format
std::string facet="%Y%m%d-%H:%M:%s";
std::string zone="UTC+00";

// create a facet
boost::local_time::local_time_facet *time_facet;
time_facet = new boost::local_time::local_time_facet;

// create a stream and imbue the facet
std::stringstream stream(std::stringstream::in | std::stringstream::out);
stream.imbue(std::locale(stream.getloc(), time_facet));

// create zone
boost::local_time::time_zone_ptr time_zone;
time_zone.reset(new boost::local_time::posix_time_zone(zone));

// write local from calculated zone in the given facet to stream
stream << boost::local_time::local_microsec_clock::local_time(time_zone);

// now you can get the string from stream
std::string my_time = stream.str();

这个例子可能不完整,因为我复制了一些代码,但我希望你明白这一点。

使用facet,您可以设置格式。 %s(小s,大S没有分数)设置秒数与实际。您可以在facet format的文档中阅读此内容。

时区用于计算到右侧区域的本地计算机时间。也许对你来说没必要。