很奇怪,大型工程java插入数据到mysql
发现更新日期时间跟os的时间相差一小时。(os时区是gmt 欧洲时间)初步查明是夏时制的问题,质疑os java
为什么会跟夏时制有关系 ,为社么会不一致??

解决方案 »

  1.   

    1. 检查你的操作系统的时区设置2. 检查你的mysql的时区设置。mysql> show variables like '%zone%';
    +------------------+---------------------+
    | Variable_name    | Value               |
    +------------------+---------------------+
    | system_time_zone | China Standard Time |
    | time_zone        | SYSTEM              |
    +------------------+---------------------+
    2 rows in set (0.00 sec)mysql>
      

  2.   

    时区问题
    你server的时区和你的system的时区不一致
      

  3.   

    server-----我用的是java 的 tomcat server 
    他的时区设置 很可能是不一致的哦另外java 代码还有一个默认时区对吗 ??  (这样有3个时区啦 )
      

  4.   


    linux系统时区和时间的设置
    时间:2009-08-12 11:15来源:未知 作者:admin 点击:1926次
    linux 系统时区和时间的设置问题 问题描述:系统时间不对、时区也不对的修改方法 系统环境 centos5 一:修改系统时间 date -s 00:00:00 clock -w 二:同步系统时间 若修改不好则同步系统时间 ntpdate 192.168.1.5(此ip是时间服务器的ip地址)后面加上更新的
      linux系统时区和时间的设置问题
    问题描述:系统时间不对、时区也不对的修改方法
    系统环境 centos5一:修改系统时间
    date -s 00:00:00clock -w二:同步系统时间
    若修改不好则同步系统时间ntpdate 192.168.1.5(此ip是时间服务器的ip地址)后面加上更新的时间服务器ip即可更新时间用这个命令必须得装ntp
    也就用 下面命令装成  # yum install ntp也可以修改成定时校正服务器时间
     
       # crontab -e
         加入一行 */15 * * * * ntpdate 192.168.1.25  (此ip是时间服务器的ip地址)若同步不好
    三:若系统此时时间还老是不对,则查看下系统时区为上海,centos系统会出现这个问题 装的时候时区我选择的是Asia/ShangHai,但是时间显示却不正确修改方法:
    1.修改/etc/sysconfig/clock文件的内容为:
          ZONE="Asia/Shanghai"
          UTC=false
          ARC=false
    2.执行“cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime”
    修改后若还不可以的话 用下面的方法试试打开/usr/share/zoneinfo/Asia/Shanghai 文件查看文件最后是不是GMT+8  如果不是的话 就修改为GMT+8  就可以了
    然后执行cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime    \\\\\\\将/usr/share/zoneinfo/Asia/Shanghai复制到/etc/localtime
    或者ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime     \\\\\\\将/etc/localtime指向/usr/share/zoneinfo/Asia/Shanghai
    查看系统当前时间的命令是date。 
    附注:关于UTC和GMT的资料世界协调时间UTC
    多数的两地时间表都以GMT来表示,但也有些两地时间表上看不到GMT字样,出现的反而是 UTC这3个英文字母,究竟何谓UTC?事实上,UTC指的是Coordinated Universal Time-世界协调时间(又称世界标准时间、世界统一时间),是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以「秒」为单位的国际原子时所综合精算而成的时间,计算过程相当严谨精密,因此若以「世界标准时间」的角度来说,UTC比GMT来得更加精准。其误差值必须保持在0.9 秒以内,若大于0.9秒则由位于巴黎的国际地球自转事务中央局发布闰秒,使UTC与地球自转周期一致。所以基本上UTC的本质强调的是比GMT更为精确的世界时间标准,不过对于现行表款来说,GMT与UTC的功能与精确度是没有差别的。夏日节约时间DST
    所谓「夏日节约时间」Daylight Saving Time(简称D.S.T.),是指在夏天太阳升起的比较早时,将时钟拨快一小时,以提早日光的使用,在英国则称为夏令时间(Summer Time)。这个构想于1784年由美国班杰明·富兰克林提出来,1915年德国成为第一个正式实施夏令日光节约时间的国家,以削减灯光照明和耗电开支。自此以后,全球以欧洲和北美为主的约70个国家都引用这个做法。目前被划分成两个时区的印度也正在商讨是否全国该统一实行夏令日光节约时间。欧洲手机上也有很多GSM系统的基地台,除了会传送当地时间外也包括夏令日光节约时间,做为手机的时间标准,使用者可以自行决定要开启或关闭。值得注意的是,某些国家有实施「夏日节约时间」的制度,出国时别忘了跟随当地习惯在表上调整一下,这可是机械表没有的功能设计哦!格林威治标准时间GMT
    十七世纪,格林威治皇家天文台为了海上霸权的扩张计画而进行天体观测。1675年旧皇家观测所(Old Royal Observatory) 正式成立,到了1884年决定以通过格林威治的子午线作为划分地球东西两半球的经度零度。观测所门口墙上有一个标志24小时的时钟,显示当下的时间,对全球而言,这里所设定的时间是世界时间参考点,全球都以格林威治的时间作为标准来设定时间,这就是我们耳熟能详的「格林威治标准时间」(Greenwich Mean Time,简称G.M.T.)的由来,标示在手表上,则代表此表具有两地时间功能,也就是同时可以显示原居地和另一个国度的时间。
      

  5.   

    Linux下jvm时区设置
    在一个精简的Linux安装上jre,发现所有的java程序获取的时间都不是系统时间。后来发现原来是时区不对。java程序获取的时间都是GMT时间,而系统是北京时间,应该是GMT+8,刚好相差8小时。网上搜了好多资料,只有两种方法:1、在程序中使用java的函数设定时区。2、在启动java程序时加参数-Duser.timezone=GMT+8不过总不能去修改每个程序的源码去设定时区吧。也不想在每个java程序启动的时候加参数,太麻烦了。就没有一劳永逸的办法了?开始以为jre应该会有某个配置文件保存了时区的配置,结果一无所获。不过总有jre总要去系统中获取时区配置吧。于是开始想是不是java用的是linux中的系统配置文件?于是到linux系统下/etc/sysconfig目录看时区配置。发现缺少了clock这个用于设置时区的文件。把别的linux系统中的这个文件拷过来一试,ok。java程序的时间和系统时间一致了。看来jre是从/etc/sysconfig/clock这个文件中获取时区信息的。附clock文件内容:ZONE="Asia/Shanghai"
    UTC=false
    ARC=falseZONE -- 时区
    UTC  -- 表明时钟设置为UTC。 
    ARC  -- 仅用于alpha表明使用ARC。 linux下面是简单的 copy那个lock文件就可以啦 刚好下午看过
    windows需要看注册表
    强制使用指定的时区import java.text.DateFormat;import java.util.Date;import java.util.Locale;import java.util.TimeZone;
    public class Ademo {    public static void main(String[] args) {       Locale localeChina = Locale.CHINESE;       TimeZone timeZoneShanghai = TimeZone.getTimeZone("Asia/Shanghai");
           DateFormat dateFormatterShanghai = DateFormat.getDateTimeInstance(              DateFormat.FULL, DateFormat.FULL, localeChina);       Date curDate = new Date();
           dateFormatterShanghai.setTimeZone(timeZoneShanghai);       System.out.println("Date= " + dateFormatterShanghai.format(curDate));    }}
    [2009-10-29 20:23:14] bruce 说: 参考:
    [2009-10-29 20:23:15] bruce 说: private String getSystemDateTime(){
              Calendar  ca  =Calendar.getInstance(TimeZone
                    .getTimeZone("GMT+8:00"));
              int year = ca.get(Calendar.YEAR);
              int month = ca.get(Calendar.MONTH)+1;
              int date = ca.get(Calendar.DATE);
              int hour = ca.get(Calendar.HOUR_OF_DAY);
              int minute = ca.get(Calendar.MINUTE);
              int second = ca.get(Calendar.SECOND);
              String yearStr = String.valueOf(year);
              String monthStr = String.valueOf(month);
              String dateStr = String.valueOf(date);
              String hourStr = String.valueOf(hour);
              String minuteStr = String.valueOf(minute);
              String secondStr = String.valueOf(second);
              if(month<10){
                  monthStr="0"+monthStr;
              }
              if(date<10){
                  dateStr="0"+dateStr;
              }
              if(hour+8<10){
                  hourStr="0"+hourStr;
              }
            if(minute<10){
                minuteStr="0"+minuteStr;
            }
            if(second<10){
                secondStr="0"+secondStr;
            }        return yearStr+"-"+monthStr+"-"+dateStr+" "+hourStr+":"+minuteStr+":"+secondStr;
          }[2009-10-29 20:14:13] bruce 说: System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z").parse("2009-10-29T18:30:00 CST"));
    System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z").parse("2009-10-29T10:30:00 UTC"));
    在我机器运行2个时间是一致的啦
    Thu Oct 29 18:30:00 CST 2009
    Thu Oct 29 18:30:00 CST 2009