我有时区名称,如欧洲/巴黎,美国/纽约,如中所述 http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
鉴于这些字符串(如“Europe / Paris”),我想知道这些时区的UTC偏移量(以秒为单位)。
我能想到的一种方法是使用TZ环境变量来设置时区和计算偏移量。但我能够弄清楚如何做到这一点。
我在Linux上使用C语言。
需要你的建议!
答案 0 :(得分:2)
我使用以下代码来获取特定时区的时间。
time_t mkTimeForTimezone(struct tm *tm, char *timezone) {
char *tz;
time_t res;
tz = getenv("TZ");
if (tz != NULL) tz = strdup(tz);
setenv("TZ", timezone, 1);
tzset();
res = mktime(tm);
if (tz != NULL) {
setenv("TZ", tz, 1);
free(tz);
} else {
unsetenv("TZ");
}
tzset();
return(res);
}
使用此功能可以计算偏移量。例如:
int main() {
char *timezone = "America/New_York";
struct tm tt;
time_t t;
int offset;
t = time(NULL);
tt = *gmtime(&t);
offset = mkTimeForTimezone(&tt, timezone) - t;
printf("Current offset for %s is %d\n", timezone, offset);
}