黑马程序员技术交流社区

标题: 输出格式为什么不一样啊? [打印本页]

作者: yangyinhui    时间: 2013-4-3 21:36
标题: 输出格式为什么不一样啊?
public static void main(String[] args) throws Exception  {
                demo1();
                demo2();
        }


        private static void demo2() throws Exception {
                String s="2003-02-03 20:03:30";
                SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date date=sdf.parse(s);
                System.out.println(date);
        }
               

        private static void demo1() {
                Date date=new Date();
                SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ");
                String s=sdf.format(date);
                System.out.println(s);
        }

}
输出结果
demo1():2013-04-03 21:32:56
demo2():      Mon Feb 03 20:03:30 CST 2003
我的问题是问什么它们两个的输出格式不一样呢?
作者: yangyinhui    时间: 2013-4-3 21:47
刚才电脑卡以为没发表所以发重复了
作者: 王俊杰    时间: 2013-4-3 22:34
我是这么想的。

我觉得问题可能在Demo2中的Date date=sdf.parse(s);这一句上。

按照这个线索查找API文档,发现这个方法是DateFormat的。

里面说See the parse(String, ParsePosition) method for more information on date parsing.

然后在public abstract Date parse(String source, ParsePosition pos)里面有如下的解释:

This parsing operation uses the calendar to produce a Date.
As a result, the calendar's date-time fields and the TimeZone value may have been overwritten, depending on subclass implementations.
Any TimeZone value that has previously been set by a call to setTimeZone may need to be restored for further operations.

用parser方法得到一个Date对象,这个对象的TimeZone属性可能被重写过。我觉得可能是这个原因。更加具体的原因我也不知道了~~

在Demo2里面加一句format处理,得到的是个字符串。这时候就输出一致了。
  1. ...
  2. Date date = sdf.parse(s);
  3. String dateStr = sdf.format(date); // 再次格式化一下,得到字符串               
  4. System.out.println(dateStr);
  5. ...
复制代码
希望能帮到你。共同学习,共同进步!
作者: yangyinhui    时间: 2013-4-3 23:04
王俊杰 发表于 2013-4-3 22:34
我是这么想的。

我觉得问题可能在Demo2中的Date date=sdf.parse(s);这一句上。

2013-04-03 23:03:22
2003-02-03 20:03:30
好的,我得到结果了,也明白了原因,谢谢了,愿我们共同进步,哈哈。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2