Java 为什么字符串使用SimpleDataFormat会导致IllegalArgumentException?

Java 为什么字符串使用SimpleDataFormat会导致IllegalArgumentException?,java,Java,为什么此代码会导致非法参数异常 final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); dateFormat.format(new Date() + "23:59") // IllegalArgumentException occurs 时间被保存为字符串。走错路了吗?是的。这是错误的。请将代码更改为 SimpleDateFormat dateFormat = new Simple

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

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

时间被保存为字符串。走错路了吗?

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

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

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

因为您正在尝试格式化字符串,而不是尝试格式化日期。因此,您使用的是(
Format.Format(Object)
而不是:
DateFormat.Format(Date)
),它抛出一个非法参数,如文档所示:

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

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

SimpleDateFormat.format(Date)
SimpleDateFormat.format(Object)
SimpleDateFormat
中有这两种方法
用你所做的你称之为第二个。因此
您传入的字符串是无效日期,您将收到此异常。

我想你认为
newdate()
会给你一个没有
Java中的时间部分。不,它也给你时间。所以你的

newdate()+“23:59”

变得有点像

Wed Jan 08 04:13:58东部时间201423:59


因此,您会遇到一个问题。

new Date()
是一个日期数据类型,它已经在
EEE,dd-MMM-yyyy-HH:mm:ss z
格式中。是的,这是错误的方式,字符串应与日期模式匹配,但如何解决此问题?为什么会有最终格式?由于此日期格式是必需的且不应更改,我需要此输出:2014-01-08T09:34:00,但仅dateFormat.format(new date())将2014-01-08T01:00:00作为输出+1,尽管值得一提的是,连接运算符正在导致调用
Date.toString()
。我需要此输出:2014-01-08T09:34:00,但只有dateFormat.format(new Date())将2014-01-08T01:00:00作为输出output@Marwief嗯,这个代码对我来说很好用。如果我做这个System.out.println(dateFormat.format(new Date()),我会得到2014-01-08T04:17:53;也许您的系统时间现在设置为凌晨1点。以后再试试,我想应该可以。