0

我有一台从多个设备收集信息的服务器。每个设备与服务器处于不同的时区。我希望将服务器的时间与设备发送服务器的时间进行比较。1. 设备如何获取包含时区在内的当前时间(这将被发送到服务器)?2. 服务器如何将其本地时间与服务器提供的时间进行比较?

4

1 回答 1

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 实用程序处理其他国家/地区的 DST(不过,您需要在每个国家/地区定义 DST 规则)。

于 2012-07-22T17:57:35.687 回答