【发布时间】:2016-10-01 22:06:32
【问题描述】:
感谢为此做出贡献的人question。
我对其进行了一些修改,以灵活的自定义格式将字符串转换为纪元时间。
我不明白为什么我的格式 "%m/%d/%Y %H:%M:%S" 失败但另一种格式 %Y/%m/%d %H:%M:%S 有效。我该如何解决?
#include <iostream>
#include <boost/date_time.hpp>
namespace bt = boost::posix_time;
std::time_t pt_to_time_t(const bt::ptime& pt)
{
bt::ptime timet_start(boost::gregorian::date(1970,1,1));
bt::time_duration diff = pt - timet_start;
return diff.ticks()/bt::time_duration::rep_type::ticks_per_second;
}
void seconds_from_epoch(const std::string& s,const std::string format_string)
{
const std::locale format = std::locale(std::locale::classic(),new bt::time_input_facet(format_string));
bt::ptime pt;
std::istringstream is(s);
is.imbue(format);
is >> pt;
// if(pt != bt::ptime())
// break;
std::cout << " ptime is " << pt << '\n';
std::cout << " seconds from epoch are " << pt_to_time_t(pt) << '\n';
}
int main()
{
seconds_from_epoch("7/23/2012 4:10:43","%m/%d/%Y %H:%M:%S");
seconds_from_epoch("2004/03/21 12:45:33","%Y/%m/%d %H:%M:%S");
}
结果:
g++ main.cpp -Wall -Wconversion -Wfatal-errors -Wextra -std=c++11 -o main
./main
ptime is not-a-date-time
seconds from epoch are 9223372036854
ptime is 2004-Mar-21 12:45:33
seconds from epoch are 1079873133
【问题讨论】: