Java日历和日期格式

时间:2016-07-04 09:27:32

标签: java date

我对Java Calendar感到困惑。为什么运行此代码时会发生异常:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal2 = Calendar.getInstance();
System.out.println(dateFormat.format("todayDate : " + cal2.getTime()));

这是错误:

Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Date
    at java.text.DateFormat.format(DateFormat.java:301)
    at java.text.Format.format(Format.java:157)
    at test.CleanDirectory.main(CleanDirectory.java:20)

5 个答案:

答案 0 :(得分:3)

dateFormat.format获取Date类的实例。 可能你应该这样写: System.out.println("todayDate : " + dateFormat.format(cal2.getTime()));

答案 1 :(得分:2)

因为您尝试将字符串todayDate : <Date>格式化为格式“yyyy-MM-dd”,这是不可能的。

更改为

System.out.println("todayDate : " + dateFormat.format(cal2.getTime()));

答案 2 :(得分:2)

其他答案都是正确的。

java.time

但是你正在使用陈旧过时的麻烦课程。它们已被Java 8及更高版本中内置的java.time类取代。

String output = LocalDate.now( ZoneId.of( "America/Montreal" ) ).toString() ;

你忽略了时区的关键问题。确定日期需要时区。对于任何特定时刻,日期在全球各地按时区变化。

如果省略可选的时区参数,则会应用JVM的当前默认时区。即使在运行时(!),该默认值也可以更改。因此,最好始终指定所需/预期的时区。

您需要的输出格式由ISO 8601标准定义。默认情况下,java.time类使用这些格式。所以不需要定义格式化模式。

ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zoneId );
String output = today.toString();

答案 3 :(得分:1)

DateFormat.format需要Date,您传递的字符串前缀为"todayDate :"

这应该有效:

System.out.println("todayDate : " + dateFormat.format(cal2.getTime()));

答案 4 :(得分:1)

在格式化期望日期对象时,您已经错误地编写了语法。

    System.out.println("todayDate : " + dateFormat.format(cal2.getTime()));