我对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)
答案 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 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()));