如果你不介意一些尾隨000
與小數秒:
#include <boost/date_time/local_time/local_time.hpp>
#include <locale>
static boost::local_time::time_zone_ptr const s_timezone(new boost::local_time::posix_time_zone("+02:00"));
std::string mydateformat(boost::local_time::local_date_time const& ldt)
{
using namespace boost;
std::ostringstream ss;
boost::local_time::local_time_facet* output_facet = new boost::local_time::local_time_facet();
ss.imbue(std::locale(std::locale::classic(), output_facet));
output_facet->format("%Y-%m-%dT%H:%M:%s%q");
ss.str("");
ss << ldt;
return ss.str();
}
std::string mydateformat()
{
using namespace boost;
posix_time::ptime my_ptime = posix_time::second_clock::universal_time();
local_time::local_date_time ldt(my_ptime, s_timezone);
return mydateformat(ldt);
}
int main()
{
using namespace boost;
gregorian::date d(2014, 5, 12);
posix_time::time_duration td(16, 14, 1, 809000);
local_time::local_date_time ldt(d, td, s_timezone, false/*daylight savings*/);
std::cout << mydateformat(ldt) << "\n";
assert("2014-05-12T16:14:01.809000+0200" == mydateformat(ldt));
}
謝謝,這是不是我真的想要但可以成爲我的錯,解釋我想要的。它可以幫助我找到真正的解決方案。我用更多細節更新我的問題。 – user3807511
@ user3807511已經顯示了從「ptime」獲取'local_date_time'的方式(在'mydateformat'!的第二個重載中)。要轉換爲「系統時區」,請參閱文檔。但是,請注意,相信系統時區可能構成安全漏洞。 – sehe
你能解釋爲什麼'utc_time_zone'是從包含字符串'「+02:00」'的表達式初始化的嗎? –