我在英国有一台服务器(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(<ime);
//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(<ime);
strftime(buff, sizeof(buff), "%Y%m%d", today);
return buff;
在添加偏移量之前我不能使用tm结构,因为如果我将ltime转换为tm结构而不是添加小时和分钟,我可能会遇到小时和分钟的溢出。这可以通过mktime()修复,但mktime也会转换为我不想要的本地时间。
此解决方案存在一个小问题。时间仍然是1小时。这是因为当前的夏令时有效。函数localtime()和mktime()以某种方式抓住了这个函数,但是这些函数只为服务器本地时间抓取它,但我需要它用于指定的函数,如GMT-5:00或GMT + 2:00。
这对我来说是一个全新的领域,我希望有人能够找到一个可能的解决方案。我希望这不是重复,但我没有找到类似的问题。
答案 0 :(得分:0)
到目前为止,您的代码是正确的。 “GMT-5:00”和“GMT + 2:00”的含义始终相同,与DST(夏令时又称夏令时)无关。
换句话说,DST已经需要包含在这些规范中。
例如,在欧洲中心,您不能只说“GMT + 01”。你有CET和CEST,意思是“GMT + 01”或“GMT + 02”。