问题描述
我有时区名称,如欧洲/巴黎,美国/纽约,如
中所述
I have timezone names like Europe/Paris , America/New_York as described in
http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
给定这些字符串(如Europe / Paris)我想知道UTC偏移量这些时区的秒数。
Given these strings (like "Europe/Paris") I want to know the UTC offset in seconds for these timezones.
我可以想到的一种方式是使用TZ环境变量来设置时区并计算offset。但是我能够弄清楚如何做到这一点。
One way I can think of is play with TZ environment variables to set timezone and calculate offset.But I am able to figure out exactly how to do this.
我正在C上工作linux。
I am working in C on linux.
需要你的建议!
推荐答案
我正在使用以下代码来获取具体时区的时间。
I am using the following code to get time with a specific timezone.
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);
}
使用此函数计算偏移量是前进的。例如:
Using this function the calculation of the offset is strait-forward. For example:
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);
}
这篇关于如何计算C中IANA时区名称的UTC偏移量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!