我在英国(GMT + 1)拥有一台服务器,并且需要存储加拿大(GMT-5)的日期。这是相对简单的。

//gmt_operator, gmt_hr, gmt_min are all grabbed from a database
//These are the data extracted from GTM+5:00 for example.

//Get UTC+00:00 in seconds
time_t ltime;
time(&ltime);
//Add GMT offset
if (gmt_operator == '+')
    ltime = ltime + (gmt_hr*60*60) + (gmt_min*60);
else if (gmt_operator  == '-')
    ltime = ltime - (gmt_hr*60*60) - (gmt_min*60);
else
    return NULL;
char buff[9];
struct tm * mydate= gmtime(&ltime);
strftime(buff, sizeof(buff), "%Y%m%d", today);
return buff;



该解决方案存在一个小问题。时间仍然是1小时。这是因为当前的夏令时正在起作用。函数localtime()和mktime()以某种方式捕获了此消息,但是这些函数仅在服务器本地时间捕获了它,但是我需要一个指定的时间,例如GMT-5:00或GMT + 2:00。

对我来说,这是一个全新的领域,我希望能提出一些可能的解决方案。我希望这不是重复的,但是我没有找到类似的问题。

最佳答案

到目前为止,您的代码是正确的。 “GMT-5:00”和“GMT + 2:00”的含义始终相同,与DST(夏令时又称夏令时)无关。

换句话说,DST已经需要包含在这些规范中。

例如,在欧洲中部,您不能只说“GMT + 01”。您具有CET和CEST,表示“GMT + 01”或“GMT + 02”。

关于c++ - 获取指定时区的日期和时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50878723/

10-13 02:50