Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4042373
  • 博文数量: 536
  • 博客积分: 10470
  • 博客等级: 上将
  • 技术积分: 4825
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-26 14:08
文章分类

全部博文(536)

文章存档

2024年(3)

2021年(1)

2019年(1)

2017年(1)

2016年(2)

2013年(2)

2012年(10)

2011年(43)

2010年(10)

2009年(17)

2008年(121)

2007年(252)

2006年(73)

分类:

2010-07-13 15:31:44

看看一个很简单的程序:
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都不知道是什么意思!


阅读(2888) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~