开源中文网

您的位置: 首页 > IBM Aix > 正文

aix 夏令时,localtime mktime

来源:  作者:

看看一个很简单的程序: 
int main(int argc, char *argv[]) 

time_t tm; 
struct tm *tp; 

time(&tm); 
tp = localtime(&tm); 
#define SCN_TM_FMT "%04u-%02u-%02u %02u:%02u:%02u" 
#define SCN_TP_FMT(tp) tp->tm_year+1900, tp->tm_mon+1, tp->tm_mday, tp->tm_hour, tp->tm_min, tp->tm_sec 
fprintf(stderr, SCN_TM_FMT" isday:%d\n", SCN_TP_FMT(tp), tp->tm_isdst); 

return (0); 


不同的系统输出不一样: 

我自己的Linux输出: 
[oracle@asm odt]$ bin/odt_ut 
2010-07-09 20:07:54 isday:0 
[oracle@asm odt]$ uname -a 
Linux asm 2.6.9-22.EL #1 Mon Sep 19 18:20:28 EDT 2005 i686 i686 i386 GNU/Linux 

公司AIX输出: 
P270$(/home/shangj/ganhk/dmp/module/c/v0/odt)uname -a 
AIX P270 2 5 0005A9DC4C00 
P270$(/home/shangj/ganhk/dmp/module/c/v0/odt)bin/odt_ut 
2010-07-13 15:29:15 isday:1 

主要是tm_isdst上面为什么不一样,下面这遍文章应该可以解释这个问题了。 

++++++++++++++++++++++++++++++++++++ 

由于系统选择了夏令时,导致数据库和系统时间差1个小时 

echo $TZ 

修改/etc/environment 。设置TZ=BEIST-8 

处理方法这里有个帖子不错 

http://www.fengjian.org/mine/blog/article.asp?id=122 

某日发现IBM小型机的AIX系统时间快一个小时,故经过确认,修改应该没有问题。 

其实上有问题—oracle数据库记录的一些数据都是快一小时,看看系统时间和oracle取到的时间又是对的,如下: 

oracle: 

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as datetime from dual; 

DATETIME 
--------------------- 
2008-05-23 19:14:56 

aix: 

bash-3.00# date 
Fri May 23 19:14:56 BEIDT 2008 

bash-3.00# echo $TZ 
BEIST-8BEIDT 

看看么好像对的,北京时间,其实问题是出在DT的问题上,好像是指夏令!这里有一些解释 

------- 
夏令时Daylight Saving Time就查了一下,原来是夏令时,但中文中的夏令时,我也不懂呀!又到百度/google看了一下,原来如此! 

夏令时,又称“日光节约时制”(Daylight Saving Time),是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时”。一般在天亮早的夏季人为将时间提前一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个采纳夏时制的国家具体规定不同。目前全世界有近110个国家每年要实行夏令时。 

据说最早建议使用夏时制的是本杰明·富兰克林,他在任美国驻法国大使期间,由于习惯于当时美国农村贵族的早睡早起生活,早上散步时看到法国人10点才起床,夜生活过到深夜。于是他在1784年的一期《巴黎杂志》上发表了一篇文章,说法国人的生活习惯浪费了大好的阳光,建议法国人早睡早起,说每年可以节约6千4百万磅蜡烛。但他当时并没有建议实行夏时制,因为当时根本还没有统一的时区划分。不过夏时制在英语里就是“节约阳光时间” 

1942年,第二次世界大战期间,美国又实行了夏时制,1945年战争结束后取消。1966年,美国重新实行夏时制。欧洲大部分国家从1976年,即第四次中东战争导致首次石油危机3年后(1973年)开始实行夏时制。 

------------------- 
OK,问题所在,下面我们查查看看如何改!aix下其实用一下 

bash-3.00# smitty chtz 


Use DAYLIGHT SAVINGS TIME? 

Move cursor to desired item and press Enter. 

# Does this time zone go on 
# DAYLIGHT SAVINGS TIME? 

1 yes 
2 no 

F1=Help F2=Refresh F3=Cancel 
F8=Image F10=Exit Enter=Do 
/=Find n=Find Next 

选2 no 


CUT (Coordinated Universal Time) Time Zone 

Move cursor to desired item and press Enter. 

[TOP] 
(CUT0) Coordinated Universal Time (CUT) 
(GMT0) United Kingdom (CUT) 
(WET0) Western Europe (CUT) 
(AZOREST1) Azores; Cape Verde (CUT -1) 
(FALKST2) Falkland Islands (CUT -2) 
(GRNLNDST3) Greenland; East Brazil (CUT -3) 
(AST4) Central Brazil (CUT -4) 
(EST5) Eastern U.S.; Colombia (CUT -5) 
(CST6) Central U.S.; Honduras (CUT -6) 
(MST7) Mountain U.S. (CUT -7) 
(PST8) Pacific U.S.; Yukon (CUT -8) 
(AST9) Alaska (CUT -9) 
(HST10) Hawaii; Aleutian (CUT-10) 
(BST11) Bering Straits (CUT-11) 
(NZST-12) New Zealand (CUT+12) 
(MET-11) Solomon Islands (CUT+11) 
(EET-10) Eastern Australia (CUT+10) 
(JST-9) Japan (CUT +9) 
(KORST-9) Korea (CUT +9) 
(WAUST-8) Western Australia (CUT +8) 
(TAIST-8) Taiwan (CUT +8) 
(BEIST-8) Peoples Rep. China (CUT +8) 
(THAIST-7) Thailand (CUT +7) 
(TASHST-6) Tashkent; Central Asia (CUT +6) 
[MORE...7] 

F1=Help F2=Refresh F3=Cancel 
F8=Image F10=Exit Enter=Do 
/=Find n=Find Next 

选择: 
BEIST-8) Peoples Rep. China (CUT +8) 
即可:) 

提示:Any changes made to the time zone will take effect at the next system boot. 
重启生效! 

老实说不了解国外的一些制度,有时后真得不理解问题的原因,当我看到修改时区的界面,看到Daylight Saving Time都不知道是什么意思! 

Tags:aix 夏令时 localtime mktime
关于开源中文网 - 联系我们 - 广告服务 - 网站地图 - 版权声明