时间转换中的夏时制问题

时间转换中的夏时制问题

本文使用docbook书写,您可以在这里获得xml文件

Abstract

本文描述了时间转换中需要注意的夏时制问题

Table of Contents

时间中的夏时制,你注意到了吗?

时间中的夏时制,你注意到了吗?

首先来看一段代码


#include <time.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
struct tm thetime;
thetime.tm_year = 108;
thetime.tm_mon = 6;
thetime.tm_mday = 28;
thetime.tm_hour = 12;
thetime.tm_min = 30;
thetime.tm_sec = 0;
time_t t = mktime(&thetime);
printf("the time: %s/n", ctime(&t));
return 0;
}

这段代码是打印一个表示本地时间的字符串,你的答案是否为"the time: Mon Jul 28 12:30:00 2008"呢?的确,拿这段代码在PC上执行,确实获得了这个结果(根据本地时间格式的设置,可能稍微有些不同,但表示的时间为2008年7月28日12点30分0秒)。但是,把这段代码使用gcc+uclibc编译成mips版本,得到的结果却是"the time: Mon Jul 28 13:30:00 2008",为什么会有1小时的差别呢?问题就在于struct tm结构的tm_isdst成员。看看man page关于tm_isdst成员的解释:


A flag that indicates whether daylight saving time is in effect at the time described. The value is positive if daylight
saving time is in effect, zero if it is not, and negative if the information is not available.

这段话的意思是这是一个夏时制标识,正数值表示生效,0表示夏时制不生效,负数值表示无夏时制信息。使用uclibc库编译的MIPS版本显示的时间推迟了1个小时,就是由于启用了夏时制的原因。为了保险起见,最好将tm_isdst值设置成-1。添加一行thetime.tm_isdst=-1代码,在PC、MIPS、ARM平台下作了一下测试,显示均正确。

你可能感兴趣的:(时间转换中的夏时制问题)