为什么String使用SimpleDateFormat会导致IllegalArgumentException?

时间:2014-01-08 09:09:20

标签: java

为什么此代码会导致非法参数异常?

final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
dateFormat.format(new Date() + "23:59") // IllegalArgumentException occurs

时间保存为字符串。这是错误的方式吗?

3 个答案:

答案 0 :(得分:3)

因为您正在尝试格式化String,而不是尝试格式化Date。您正在使用this methodFormat.format(Object)而非this oneDateFormat.format(Date)),它会抛出IllegalArgument,如下所示:

  

抛出:      IllegalArgumentException - 如果Format无法格式化给定对象

DateFormat将日期格式化为字符串,或将字符串解析为日期。它不会格式化字符串。

答案 1 :(得分:1)

是。这是错误的。将代码更改为

  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
  dateFormat.format(new Date()) // Now working

您的字符串应与您的日期格式匹配,或者您必须在此处使用日期对象。

答案 2 :(得分:1)

SimpleDateFormat.format(Date)
SimpleDateFormat.format(Object)

SimpleDateFormat中有这两种方法 你所做的就是第二个。而作为这个 您传入的字符串是无效日期,您会收到此例外。

我认为你认为new Date()会给你约会而没有 Java中的时间部分。不,它也给你时间部分。所以你的

new Date() + "23:59"

变得类似

Wed Jan 08 04:13:58 EST 201423:59

因此你得到的问题。