如何解决如何使用Boost.Date_Time格式化而不带前导零?
| 如何格式化boost :: posix_time :: ptime对象而不用零填充数字? 例如,我要显示“ 0”而不是“ 1”。 在.NET中,格式字符串应类似于\“ m / d / yyyy h:mm:ss tt \”。 这是一些代码,用一种错误的方式来做,只是为了获得一个主意:boost::gregorian::date baseDate(1970,1,1);
boost::posix_time::ptime shiftDate(baseDate);
boost::posix_time::time_facet *facet = new time_facet(\"%m/%d/%Y\");
cout.imbue(locale(cout.getloc(),facet));
cout << shiftDate;
delete facet;
Output: 01/01/1970
解决方法
据我所知,Boost.DateTime并未内置此功能,但是编写自己的格式化功能非常简单,例如:
template<typename CharT,typename TraitsT>
std::basic_ostream<CharT,TraitsT>& print_date(
std::basic_ostream<CharT,TraitsT>& os,boost::posix_time::ptime const& pt)
{
boost::gregorian::date const& d = pt.date();
return os
<< d.month().as_number() << \'/\'
<< d.day().as_number() << \'/\'
<< d.year();
}
template<typename CharT,TraitsT>& print_date_time(
std::basic_ostream<CharT,boost::posix_time::ptime const& pt)
{
boost::gregorian::date const& d = pt.date();
boost::posix_time::time_duration const& t = pt.time_of_day();
CharT const orig_fill(os.fill(\'0\'));
os
<< d.month().as_number() << \'/\'
<< d.day().as_number() << \'/\'
<< d.year() << \' \'
<< (t.hours() && t.hours() != 12 ? t.hours() % 12 : 12) << \':\'
<< std::setw(2) << t.minutes() << \':\'
<< std::setw(2) << t.seconds() << \' \'
<< (t.hours() / 12 ? \'P\' : \'A\') << \'M\';
os.fill(orig_fill);
return os;
}
, 我完全同意另一种回答:似乎没有格式化程序说明符,它用一个月的某天的日期给出日期。
通常,有一种使用格式化程序字符串的方法(与常见的“ 4”格式几乎相同)。这些格式说明符看起来像,例如:“ 5”。
tgamblin在这里提供了很好的解释。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。