Java日历日期操作问题

时间:2010-11-28 06:18:35

标签: java calendar simpledateformat

我尝试以下列格式获取当前日期/时间

SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z"); 
// should display something similar to  2001.07.04 AD at 12:08:56 PDT
Calendar calendar = Calendar.getInstance();
calendar.set(2009, 2, 4, 10, 22, 44);
format.format( calendar.getTime() );
System.out.println(calendar.getTime());

但它显示为IST 2009年3月4日10:22:44。

第二个问题是我想看到设定时间的毫秒值。

System.out.println(calendar.getTimeInMillis());

但它总是返回当前时间毫秒值,而不是我之前设置的时间。

我在这里缺少什么?

3 个答案:

答案 0 :(得分:2)

SimpleDateFormat#format(Object)方法返回格式化的String,它不会影响Calendar#getTime()方法返回的方式。为此,你应该做一个:

System.out.println(format.format(calendar.getTime()));

答案 1 :(得分:1)

我看到的第一个问题是format.format(calendar.getTime());返回一个字符串,并没有实际更改日历的格式。您将要使用System.out.println(format.format(calendar.getTime()));替换最后两行,以使用您指定的格式实际打印出日期(假设您的SimpleDateFormat有效,但看起来很快就可以了。)

不幸的是,不确定你遇到的第二个问题,但我有一个地方可以帮助你开始。我不是getTime()getTimeInMillis()的Javadocs措辞的粉丝。 getTime()方法返回“Date对象,表示此Calendar的时间值”,而getTimeInMillis()返回“当前时间为UTC毫秒的时间”。对我而言,措辞的不同意味着getTimeInMillis()不使用Calendar对象指定的日期,即使它是一个实例方法。请尝试System.out.println(calendar.getTime().getTime());,以便在日历的getTime()表示上调用Date方法,该文档返回1970年1月1日到Date对象表示的日期之间的时间(以毫秒为单位)

答案 2 :(得分:1)

对于问题的第二部分,您应该调用Calendar.get(Calendar.MILLISECONDS)来检索日历对象的毫秒字段。