使用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 /月/ 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
非常感謝你! – cjv
完美。請知道我儘量不要求這樣的具體幫助,我非常感激,當它是自由的。 – cjv
@cjv:你可以交流,這個答案是通過「接受」它來幫助你最多的答案。這是通過點擊答案的投票分數下的複選標記來完成的。很高興我能幫上忙。 –