使用https://github.com/HowardHinnant/date(适用于 VS-2013):
#include <iostream>
#include "tz.h"
int
main()
{
using namespace date;
using namespace std::chrono;
auto zLondon = locate_zone("Europe/London");
auto zNew_York = locate_zone("America/New_York");
auto diff = floor<hours>(zLondon->to_local(sys_days{2016_y/mar/21}) -
zNew_York->to_local(sys_days{2016_y/mar/21}));
std::cout << diff.count() << "h\n";
diff = floor<hours>(zLondon->to_local(sys_days{2016_y/jun/21}) -
zNew_York->to_local(sys_days{2016_y/jun/21}));
std::cout << diff.count() << "h\n";
diff = floor<hours>(zLondon->to_local(system_clock::now()) -
zNew_York->to_local(system_clock::now()));
std::cout << diff.count() << "h\n";
}
今天的输出(2016 年 3 月 28 日):
4h
5h
4h
要确定不是您计算机本地时间的区域中的本地时间,可以这样做:
auto zLondon = locate_zone("Europe/London");
auto tp = zLondon->to_local(system_clock::now());
auto dp = floor<days>(tp);
weekday wd = dp;
year_month_day ymd = dp;
auto time = make_time(tp-dp);
tp 是转移到“欧洲/伦敦”时区的“本地”std::chrono::time_point。
dp 与 tp 的类型相同,但精度为 days 而不是 microseconds(或其他)。
wd 是伦敦一周中的当前日期。
ymd 是伦敦当前时间的年-月-日结构(带有年、月和日获取器)。
time 是一个小时-分钟-秒-亚秒结构(带有这些吸气剂),标记当前伦敦时间。
这一切都可以用来确定市场是否开放(这个简单的示例代码忽略了节假日,但将周末考虑在内):
std::cout << "It is currently " << wd << ' ' << ymd << ' ' << time << '\n';
if (wd != sat && wd != sun && 9h <= time.hours() && time.hours() < 16h)
std::cout << "Markets open\n";
else
std::cout << "Markets closed\n";
这只是为我输出:
It is currently Thu 2016-03-31 16:39:15.656398
Markets closed