abl*_*blm 3 c++ timezone boost
我尝试将提升转换local_date_time为UTC,但我对utc_time()的返回时间感到困惑.这是一个简化的代码:
#include "boost/date_time/local_time/local_time.hpp"
int main()
{
using namespace boost::gregorian;
using namespace boost::local_time;
using namespace boost::posix_time;
ptime dt = ptime(date(2015, Mar, 2), hours(0));
time_zone_ptr tz_cet(new boost::local_time::posix_time_zone("CET"));
local_date_time local_dt = boost::local_time::local_date_time(dt, tz_cet);
std::cout << local_dt << std::endl;
std::cout << local_dt.utc_time() << std::endl;
time_zone_ptr tz_utc(new boost::local_time::posix_time_zone("UTC"));
std::cout << local_dt.local_time_in(tz_utc) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:
2015-Mar-02 00:00:00 CET
2015-Mar-02 00:00:00
2015-Mar-02 00:00:00 UTC
Run Code Online (Sandbox Code Playgroud)
UTC应该比CET(中欧时间)晚1小时.
这是一个错误还是我错过了什么?
该boost::local_time::posix_time_zone("CET")构造函数调用创建与区CET缩写和大约从UTC,为DST时移等抵消丢失的信息,即呼叫boost::local_time::posix_time_zone("CET")和boost::local_time::posix_time_zone("UTC")仅在TZ缩写名称不同外,其余都是一样的.该coliru代码演示了.base_utc_offset两个TZ 的方法调用返回00:00:00.
要解决此问题,必须设置CET区域的时间参数,例如"CET + 01:00:00 ",或使用tz_database类从CSV文件加载时区.
以下代码是演示如何解决问题的原始修改代码.请注意,CET时区描述不完整,仅作为示例提供.
#include "boost/date_time/local_time/local_time.hpp"
#include <iostream>
int main()
{
using namespace boost::gregorian;
using namespace boost::local_time;
using namespace boost::posix_time;
ptime dt = ptime(date(2015, Mar, 2), hours(0));
time_zone_ptr tz_cet(new boost::local_time::posix_time_zone("CET+01:00:00"));
local_date_time local_dt = boost::local_time::local_date_time(dt, tz_cet);
std::cout << local_dt << std::endl;
std::cout << local_dt.utc_time() << std::endl;
time_zone_ptr tz_utc(new boost::local_time::posix_time_zone("UTC"));
std::cout << local_dt.local_time_in(tz_utc) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
coliru上的相同代码可通过此链接获得.
| 归档时间: |
|
| 查看次数: |
2017 次 |
| 最近记录: |