我有一台服务器从多台设备收集信息。每个设备与服务器位于不同的时区。 我希望将服务器的时间与设备发送服务器的时间进行比较。 1.设备如何获得当前时间,包括时区(这将被发送到服务器)? 2.服务器如何将其本地时间与服务器给出的时间进行比较?
答案 0 :(得分:0)
您可以使用完全准备好处理时区的Boost date_time库。您的代码可能类似于:
// The device will collect the time and send it to the server
// along its timezone information (e.g., US East Coast)
ptime curr_time(second_clock::local_time());
// The server will first convert that time to UTC using the timezone information.
// Alternatively, the server may just send UTC time.
typedef boost::date_time::local_adjustor<ptime, -5, us_dst> us_eastern;
ptime utc_time = us_eastern::local_to_utc(curr_time);
// Finally the server will convert UTC time to local time (e.g., US Arizona).
typedef boost::date_time::local_adjustor<ptime, -7, no_dst> us_arizona;
ptime local_time = us_arizona::utc_to_local(utc_time);
std::cout << to_simple_string(local_time) << std::endl;
为了照顾DST,您需要在本地调整器定义(示例代码中的us_eastern
和us_arizona
)中手动指定它。 DST支持包含在美国,但您可以使用DST utilities处理其他国家/地区的DST(但您需要按国家/地区定义DST规则)。