1

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

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());

但它显示为 Wed Mar 04 10:22:44 IST 2009。

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

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

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

我在这里缺少什么?

4

3 回答 3

2

SimpleDateFormat#format(Object)方法返回一个 formatted String,它不影响Calendar#getTime()方法返回的方式。为此,您应该执行以下操作:

System.out.println(format.format(calendar.getTime()));
于 2010-11-28T06:28:17.937 回答
1

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

于 2010-11-28T08:25:18.597 回答
1

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

不幸的是,不确定您遇到的第二个问题,但我有一个地方让您开始。我不喜欢 Javadocs 中用于getTime()和的措辞getTimeInMillis()。该getTime()方法返回“一个Date表示 thisCalendar的时间值的对象”,同时getTimeInMillis()返回“当前时间,以 UTC 时间为单位的毫秒数”。对我来说,措辞上的差异意味着getTimeInMillis()不使用 Calendar 对象指定的日期,即使它是一个实例方法。尝试System.out.println(calendar.getTime().getTime());调用 Calendar 表示的getTime()方法,该方法Date是返回 1970 年 1 月 1 日与 Date 对象表示的日期之间的时间(以毫秒为单位)的文档。

于 2010-11-28T06:30:19.737 回答