如何在日历中使用SimpleDateFormat?


69

我有GregorianCalendar实例,需要使用SimpleDateFormat(或者可以与日历一起使用但提供必需的#fromat()功能的东西)来获取所需的输出。请提出建议的解决方法以及永久解决方案。

Answers:


102

尝试这个:

Calendar cal = new GregorianCalendar();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
dateFormat.setTimeZone(cal.getTimeZone());
System.out.println(dateFormat.format(cal.getTime()));

添加了JamesKingston答案中缺少的步骤。谢谢!
janhink 2014年

1
不添加时区有什么影响?
卡马西(Kamaci)2014年

2
@kamaci查看JamesKingston的回答下的评论。仅当您具有基于不同于系统默认时区的时区的日历对象,并且希望它在该日历的时区中打印时,才有意义。如果未设置时区,它将使用默认系统时区。如果这与日历的时区相同,则设置时区没有区别。请注意,JamesKingston的答案也适用-告诉dateFormat使用哪个日历意味着它将知道使用日历的时区。
ToolmakerSteve

36

eQui的答案缺失了一步

Calendar cal = new GregorianCalendar();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
#---- This uses the provided calendar for the output -----
dateFormat.setCalendar(cal); 
System.out.println(dateFormat.format(cal.getTime()));

1
+1,因为答案是最完整的答案。没有此方法调用,默认日历将用于格式化。(但是,问题并没有真正指定应使用哪个日历进行格式化。)
罗伯特·罗伯特(Robert

2
对于这种情况,这并不重要,但是如果您想做类似的事情:cal.setTimeZone(TimeZone.getTimeZone("GMT")); cal.setTime(new Date(record.getMillis()));似乎是。
JamesKingston,2012年

3
请问,如果有人只需要格式化输出,为什么还要设置日历?
Denys S.

为了强调JamesKingston的先前评论,如果'cal'的时区是系统默认时区以外的任何时间,则eQui的答案(即,不使用dateFormat.setCalendar)将产生错误的输出。要回答@ denys-s,不仅是格式问题,而且是正确性。
斯科特·达德利

1
我应该通过“正确性”来澄清,这意味着没有setCalendar,它将在显示之前将日历转换为系统默认时区,这可能不是您想要的(特别是如果您未列出时区的话)在格式字符串中!)。例如,即使您使用代码将日历明确设置为2014-05-08,也可能会显示为2014-05-07或2014-05-09,具体取决于确切的时区偏移量。
斯科特·达德利

3

Calendar.getTime()返回可以与SimpleDateFormat一起使用的Date。


3

只需调用calendar.getTime()并将结果Date对象传递给format方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.