根据时区更改时区而不更改日期格式

时间:2014-09-28 13:32:53

标签: c linux

在下面的代码中,我尝试显示纪元时间值" 1411636989"的pdt和gmt格式,但它只更改时区而不是日期,以下是样本输出。

int main()
{
    time_t my_time = 1411636989;

    if (putenv("TZ=PDT"))
        printf("Current time zone = %s###########\n", getenv("TZ"));
    else {
        printf("Time zone = %s###########\n", getenv("TZ"));
        printf("PDT 1411636989 = %s$$$$$$$$$$$$$$$$$$\n", asctime(localtime(&my_time)));
    }

    if (putenv("TZ=GMT"))
        printf("putenv failed errno = %d##########\n",errno);
    else {
        printf("New time zone = %s###########\n", getenv("TZ"));
        printf("GMT 1411636989 = %s$$$$$$$$$$$$$$$$$$\n", asctime(localtime(&my_time)));
    }

    return 0;
}

Sample O/P:
Time zone = PDT###########
PDT 1411636989 = Thu Sep 25 09:23:09 2014
$$$$$$$$$$$$$$$$$$
New time zone = GMT###########
GMT 1411636989 = Thu Sep 25 09:23:09 2014
$$$$$$$$$$$$$$$$$$

2 个答案:

答案 0 :(得分:1)

您必须使用与/ usr / share / zoneinfo /目录下的文件名匹配的时区之一。 PDT的TZ不会被识别。如果您的TZ变量无效,系统将回退到GMT。

将其设为“美国/太平洋”。

putenv("TZ=US/Pacific")

答案 1 :(得分:-1)

由于time_t通常以秒为单位表示,因此请使用常规算法将值添加到my_time

if(putenv("TZ" = "GMT"))之前添加此行以增加GMT的时间:

my_time += (7 * 60 * 60);