学海拾遗

生活、技术、思想无处不在学习
posts - 52, comments - 23, trackbacks - 0, articles - 3
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

你的SimpleDateFormat起作用了吗?

Posted on 2008-04-29 20:52 tanzek 阅读(6950) 评论(3)  编辑  收藏
通过SimpleDateFormat格式化日期输出是一种常见的用法,如下:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(
new Date()));
如果上述代码正常工作,它将显示当前的日期年月日时分秒格式。

但是有时候它并没有如我们预期的那样,而显示的时间比当前的时间少了八个小时,或是多了八个小时,而这一切就需要我们再关注另外一个问题,那就是时区(TimeZone)。
如果我们将时区进行设置为“东八区”,那么就一切回复正常了。如下有两种方式:

1、通过改变默认的时区
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8:00"));
SimpleDateFormat sdf 
= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(Calendar.getInstance()));

2、通过设定SimpleDateFormat的构造参数
    通过查阅API手册,可知SimpleDateFormat还有一个构造函数:SimpleDateFormat(String pattern, Locale locale) ,因此我们就可通过设定Locale来取得特定时区的日期格式。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
System.out.println(sdf.format(new Date());

到这时候,关于时区的简单设定就结束了,更多的参考请在网上搜索关于Java Locale的设定文章。

评论

# re: 你的SimpleDateFormat起作用了吗?  回复  更多评论   

2008-05-18 15:48 by [C.R.S.M]K01
实践证明:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
System.out.println(sdf.format(new Date());

加上Locale.CHINA是不行的,建议摒弃。回复不能截图等着我再写篇也是关于这个问题的文章,其实这个问题也不是个小问题了。网上搜下就发现有人说这个问题可以导致数据库查询异常及BLOG不正常网上有朋友也遇到了。不过不是Java的。

# re: 你的SimpleDateFormat起作用了吗?  回复  更多评论   

2008-12-29 17:27 by 有朝一日
很好
我也遇到此类的问题,看了上面的解决方案,我现在已经解决啦!

# re: 你的SimpleDateFormat起作用了吗?  回复  更多评论   

2009-05-12 19:44 by shanxmxj
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(System.currentTimeMillis());
String nowTime = sdf.format(date);
这样就可以取到了。

只有注册用户登录后才能发表评论。


网站导航: