您的位置:首页 > 其它

时区设置函数tzset()

2012-07-05 21:22 211 查看
转自:http://hi.baidu.com/peruke/item/e77273c841150413505058d7

#incude <time.h>

void tzset(void);

设置时间环境变量。

说明

tzset()函数使用环境变量TZ的当前设置把值赋给三个全局变量:daylight,timezone和tzname。

这些变量由ftime和localtime函数使用校正格林威治(UTC)时间为本地时间,通过time函数从系统时间计算UTC,使用如下语法设置TZ环境变量:

set TZ=tzn[+|-]hh[:mm[:ss]][dzn]

tzn:三字母时区名,例如PST,你必须指出本地时间距UTC的偏移量。

hh:UTC与本地时间的时差,任选带符号的。

mm:分钟,由冒号(:)与hh分隔开。

ss:秒钟,用冒号(:)与mm分隔开。

dzn:三字母夏令时时区例如PDT。如果夏令时没作用,设置TZ时不设置dzn的值。C运行库假设在计算夏令时(DST)时执行美国的规则。

其实tzn和dzn可为任意3个字母,只要中间的时差设置正确,localtime()和gmtime()函数调用都会处理正确。要注意一点,比如要将时区TZ设置为中国所在的东八区(即UTC+8:00),不使用夏令时,使用如下语句:

setenv("TZ", "GMT-8", 1);

注意是GMT-8而不是GMT+8,要不就设为了西八区,要比UTC还慢8个小时,这一点比较令人费解。

例如,为了设置TZ环境为德国对应的当前时区,你可以使用如下语句之一:

set TZ=GST-1GDT

set TZ=GST+1GDT

这些字符串使用GST指出德国标准时间,假设德国是超前UTC一个小时,并假设夏令时起作用。

如果TZ值没设置,tzset试图使用操作系统指定的时区信息,在Windwos NT和Windows95之下,这个信息指定在控制面版的日期/时间应用中,如果tzset不能获取这些信息,它缺省使用PST8PDT,它指定为太平洋标准时间。

基于TZ环境变量的值,当调用tzset时把如下值赋给全局变量daylight、timezone和tzname:

全局变量 说明 缺省值

daylight 如果在TZ设置中指定夏令时时区 1则为非0值;否则为0

timezone UTC和本地时间之间的时差,单位为秒 28800(28800秒等于8小时)

tzname[0] TZ环境变量的时区名称的字符串值 如果TZ未设置则为空 PST

tzname[1] 夏令时时区的字符串值; 如果TZ环境变量中忽略夏令时时区则为空PDT在上表中daylight和tzname数组的缺省值对应于"PST8PDT"。

如果从TZ环境变量忽略DST时区,daylight的值为0,ftime,gmtime和localtime函数对于它们的DST标志返回0。

例子

/ *

TZSET.C: This program first sets up the time zone by*

placing the variable named TZ=EST5 in the environment*

table. It then uses tzset to set the global variables*

named daylight, timezone, and tzname.*/

#include <time.h>

#include <stdlib.h>

#include <stdio.h>

void main( void )

{

if( putenv( "TZ=EST5EDT" ) == -1 )

{

printf( "Unable to set TZ\n" );exit( 1 );

}

else

{

tzset(); printf( "daylight = %d\n", daylight );

printf( "timezone = %ld\n", timezone );

printf( "tzname[0] = %s\n", tzname[0] );

}

exit( 0 );

}

输出

daylight = 1

timezone = 18000

tzname[0] = EST

参见

asctime,ftime,gmtime,localtime,time,utime
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: