TZ环境变量,时区,夏令时

#include <stdio.h>
#include <sys/time.h>
#include <stdlib.h>
#include <unistd.h>

/**
 * 
 * TZ环境变量,时区,夏令时
 * 当前demon测试环境: 1.32为系统; 2.系统时区是UTC。
 *  
*/

int main()
{
	time_t now = 0; char * TZ = NULL;  struct tm *tm_ = NULL; struct timeval tval = {0,0}; struct timezone tzone = {0,0};
	TZ = getenv("TZ");
	printf("====================================> TZ = %s\n", TZ == NULL?"env TZ not seted" : TZ );
	now = time(NULL); //1970到现在的UTC时间的秒数;
	printf("time_t = %ld, ctime: = %s", now, ctime(&now) ); //char* ctime(const time_t *timer)返回一个表示当地时间的字符串(包含一个换行符),当地时间是基于参数 timer。
	gettimeofday(&tval, &tzone);
	printf("gettimeofday tval.tv_sec = %d, tval.tv_usec = %d; tzone.tz_minuteswest = %d, tzone.tz_dsttime = %d.\n", \
			tval.tv_sec, tval.tv_usec, tzone.tz_minuteswest, tzone.tz_dsttime);

	tm_ = gmtime(&now);                  //转换成UTC世界时间
	printf("gmtime: dstflag = %d, %d-%d-%d %d:%d:%d\n",tm_->tm_isdst, tm_->tm_year + 1900, tm_->tm_mon+1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec);   

	tm_ = localtime(&now);               //转换成本地时间
	printf("localtime: dstflag = %d, %d-%d-%d %d:%d:%d\n",tm_->tm_isdst, tm_->tm_year + 1900, tm_->tm_mon+1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec); 
	printf("\n");



	setenv("TZ", "CST-8", 1);//设置时区(中国东八区)

	TZ = getenv("TZ");
	printf("====================================> TZ = %s\n", TZ == NULL?"env TZ not seted" : TZ );

	now = time(NULL);
	printf("time_t = %ld, ctime: = %s", now, ctime(&now) ); 
	gettimeofday(&tval, &tzone);
	printf("gettimeofday tval.tv_sec = %d, tval.tv_usec = %d; tzone.tz_minuteswest = %d, tzone.tz_dsttime = %d.\n", \
			tval.tv_sec, tval.tv_usec, tzone.tz_minuteswest, tzone.tz_dsttime);
	
	tm_ = gmtime(&now);            
	printf("gmtime: dstflag = %d, %d-%d-%d %d:%d:%d\n",tm_->tm_isdst, tm_->tm_year + 1900, tm_->tm_mon+1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec);   

	tm_ = localtime(&now);        
	printf("localtime: dstflag = %d, %d-%d-%d %d:%d:%d\n",tm_->tm_isdst, tm_->tm_year + 1900, tm_->tm_mon+1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec); 
	printf("\n");


	setenv("TZ", "NZST-12:00:00", 1);//设置时区(新西兰标准时间) 
	TZ = getenv("TZ");
	printf("====================================> TZ = %s\n", TZ == NULL?"env TZ not seted" : TZ );

	now = time(NULL);
	printf("time_t = %ld, ctime: = %s", now, ctime(&now) ); 
	gettimeofday(&tval, &tzone);
	printf("gettimeofday tval.tv_sec = %d, tval.tv_usec = %d; tzone.tz_minuteswest = %d, tzone.tz_dsttime = %d.\n", \
			tval.tv_sec, tval.tv_usec, tzone.tz_minuteswest, tzone.tz_dsttime);
	
	tm_ = gmtime(&now);            
	printf("gmtime: dstflag = %d, %d-%d-%d %d:%d:%d\n",tm_->tm_isdst, tm_->tm_year + 1900, tm_->tm_mon+1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec);   

	tm_ = localtime(&now);          
	printf("localtime: dstflag = %d, %d-%d-%d %d:%d:%d\n",tm_->tm_isdst, tm_->tm_year + 1900, tm_->tm_mon+1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec); 
	printf("\n");


	/**
	 * 
	 * NZDT-13:00:00,M10.1.0,M3.3.0
	 * 
	 * NZST,表示新西兰标准时间;
	 * 
	 * -12:00:00表示比UTC早12小时;
	 * 
	 * NZDT,表示新西兰夏时制时间;
	 * 
	 * -13:00:00,表示夏时制时间比UTC早13小时(即比标准时间快1小时);
	 * 
	 * M10.1.0,M3.3.0表示夏令时从10月第一个星期日02:00:00开始到3月第三个星期日02:00:00结束。
	 * ==>m:指一年中的第几月(1 <= m <= 12)。
	 * ==>w:指一个月中的第几周(1 <= w <= 5),1表示第一周,5表示最后一周。
	 * ==>d:指一周中的第几天(0 <= d <= 6),0表示星期天。
	 * ==>time:该字段表示本地时间对夏时制生效或结束的时间,如果省略默认为02:00:00。
	 * 
	*/
	setenv("TZ", "NZST-12:00:00NZDT-13:00:00,M10.1.0,M3.3.0", 1);//设置时区(新西兰夏令时时间) 
	TZ = getenv("TZ");
	printf("====================================> TZ = %s\n", TZ == NULL?"env TZ not seted" : TZ );

	//while(1)
	{
		now = time(NULL);
		printf("time_t = %ld, ctime: = %s", now, ctime(&now) ); 
		gettimeofday(&tval, &tzone);
		printf("gettimeofday tval.tv_sec = %d, tval.tv_usec = %d; tzone.tz_minuteswest = %d, tzone.tz_dsttime = %d.\n", \
				tval.tv_sec, tval.tv_usec, tzone.tz_minuteswest, tzone.tz_dsttime);
		
		tm_ = gmtime(&now);            
		printf("gmtime: dstflag = %d, %d-%d-%d %d:%d:%d\n",tm_->tm_isdst, tm_->tm_year + 1900, tm_->tm_mon+1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec);   

		tm_ = localtime(&now);         
		printf("localtime: dstflag = %d, %d-%d-%d %d:%d:%d\n",tm_->tm_isdst, tm_->tm_year + 1900, tm_->tm_mon+1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec); 
		printf("\n");
		sleep(5);
	}






	return 0;
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值