Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7093831
  • 博文数量: 3857
  • 博客积分: 6409
  • 博客等级: 准将
  • 技术积分: 15948
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-02 16:48
个人简介

迷彩 潜伏 隐蔽 伪装

文章分类

全部博文(3857)

文章存档

2017年(5)

2016年(63)

2015年(927)

2014年(677)

2013年(807)

2012年(1241)

2011年(67)

2010年(7)

2009年(36)

2008年(28)

分类: Java

2013-06-08 10:33:26

原文地址:java中时间的问题 作者:fyyizu

目前我遇到过的java时间会有问题有三种情况:Locale timezone jdk
jdk导致的错误:
     曾经我安装1.6的jdk,当时程序出错,开始没发现是时间错了,后来才知道,得到的new Date()和系统的时间差了8小时,可能有的人和我一样幸运,也遇到过这样的问题。
    解决方法:
        1、找到你用的jre文件夹,以本机为例:D:\ProgramFiles\Java\jdk1.x.x\jre\lib
        2、在上述文件夹下有个zi文件夹,我们的工作都在这里。
        3、zi文件夹下有一个Etc文件夹,我们要做的工作就是从这个文件夹下找到对应的GMT文件替换zi下GMT文件。
        4、选择哪个文件呢?如果java获取的时间+N=当前系统时间,就选择GMT-N文件,重命名为GMT,覆盖掉zi下的GMT文件,如果java获取的时间-N=当前系统时间,就选择GMT+N文件,重命名为GMT,覆盖掉zi下的GMT文件。
        5、再运行一下你的程序看时间是不是正确了,如果还是不正确,请确认你的jre目录是否选得正确。
总之,就是java时间快了N的话就选+N,慢了N的话就选-N,和正常的逻辑相反。(时区嘛,向前8 就会快8小时,向后8 就会慢8小时,就像日本比中国早1小时。我猜的:-))
注意:如果用eclipse,那么eclipse里的时间还是没有改要修改jre 的对应文件,然后重启eclipse
我的拷贝的

Java\jre6\lib\zi\Etc

Java\jre6\lib\zi

Java\jdk1.6.0_18\jre\lib\zi\Etc

Java\jdk1.6.0_18\jre\lib\zi 


TimeZone导致的错误:
     确切的说,刚才那个应该就是jdk那里改了就可以修改这个系统时区了,但可以通过代码在不改变jdk的情况下修改时间

点击(此处)折叠或打开

  1. System.out.println(new Date());
  2.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.CHINESE);
  3.         TimeZone timeZoneChina = TimeZone.getTimeZone("Asia/Shanghai");//获取中国的时区
  4. //        TimeZone tz = TimeZone.getTimeZone("GMT+08:00");
  5. //        TimeZone.setDefault(tz);
  6.         sdf.setTimeZone(timeZoneChina);
  7.         String st = sdf.format(Calendar.getInstance().getTime());
  8.         System.out.println(st);
这是通过程序修改时区,也可以改变时间差问题,但不是根本解决办法啊!可能有的时候会需要它~
Locale导致的错误:
曾经和同事一起都是用linux下面开发,大家都知道linux有个最大的特点就是灵活,各种各样的东西都可以自定义,可以自由配置,每个人都可以有独特的一个操作系统。当我们调用同一个SmpleDateFormat的时候居然就产生了不一样的结果,当时还比较纳闷,java是jvm来执行是跨平台的啊,怎么现在跨个机器就不好使了呢,弄了一会发现,他打出来的时间是中文的,我的是英文的,查过api后发现有个locale的参数,比较后发现我的locale是en_US.utf8,而他的是zh_CN.gbk。看完这个估计大家也就知道怎么改了。要么修改系统的locale,dpkg-reconfigure locale(方法好多 set LANG export  直接修改文件等);要么传locale的参数。SimpleDateFormat(String pattern, Locale locale)



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