我有这个程序:
int main()
{
using namespace boost::locale;
generator gen;
std::locale::global(gen(""));
calendar cal("UTC");
calendar cal_local("Europe/Berlin");
date_time dt_utc(std::time(0), cal);
date_time dt_local(std::time(0), cal_local);
std::cerr << "UTC: " << dt_utc.get(period::hour()) << "\n";
std::cerr << "LOCAL: " << dt_local.get(period::hour()) << "\n";
}
在运行Debian Wheezy
gcc 4.7.2-5
和boost 1.49
的两个不同但相同的系统上,它的行为有所不同。两个系统都具有相同的区域设置en_US.UTF-8
。
上述程序是在Thu Sep 25 2014 11:15 UTC
附近执行的。
系统A的输出
UTC: 11
LOCAL: 11
系统B上的输出
UTC: 11
LOCAL: 13
应该导致什么?
注意:目前DST在欧洲/柏林有效
更新
两个系统上的 libboost1.49-dev
都是从Debian存储库安装的,如下所示:
user@system_a:~$ apt-cache policy libboost1.49-dev
libboost1.49-dev:
Installed: 1.49.0-3.2
Candidate: 1.49.0-3.2
Version table:
*** 1.49.0-3.2 0
500 http://ftp2.de.debian.org/debian/ wheezy/main amd64 Packages
100 /var/lib/dpkg/status
同时验证libboost_locale.so
在两个系统上都有依赖关系libicuuc.so
,libicui18n.so
和libicudata.so
。