Java 如何创建带有可选时间参数的DateFormat?

Java 如何创建带有可选时间参数的DateFormat?,java,datetime,date,format,Java,Datetime,Date,Format,我希望构造一个日期格式,该格式可以有一个时间参数 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd [hh:mm]"); 是否也可以构造一个能够解析不同格式的日期格式对象?例如,尝试当前的区域设置,然后返回到ISO-8601,或者如果其中一个失败,我应该只编写多个日期格式吗 更新:回顾这个问题,我可以看到我没有指定使用多种日期格式的原因是为了解析字符串,而不是为了格式化日期,因此格式化日期对象的模糊性对我来说并不重要。如果考虑到这

我希望构造一个日期格式,该格式可以有一个时间参数

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd [hh:mm]");
是否也可以构造一个能够解析不同格式的日期格式对象?例如,尝试当前的区域设置,然后返回到ISO-8601,或者如果其中一个失败,我应该只编写多个日期格式吗


更新:回顾这个问题,我可以看到我没有指定使用多种日期格式的原因是为了解析字符串,而不是为了格式化日期,因此格式化日期对象的模糊性对我来说并不重要。如果考虑到这一点,时间部分是否包含在解析字符串中。

SimpleDataFormat不允许您这样做。它不支持(单一)格式内的备选方案

即使有,也会有问题。考虑使用这个

new SimpleDateFormat("yyyy-MM-dd [hh:mm]");
与使用

new SimpleDateFormat("yyyy-MM-dd hh:mm");
new SimpleDateFormat("yyyy-MM-dd ");
在第一种情况下,当我根据格式解析日期时,我无法通过查看提交给我的
日期来区分“2010-01-01”和“2010-01-01 00:00”。在第二种情况下,我可以

在第一种情况下,当我在分钟和秒字段中用零格式化日期时,不清楚结果是否应以“00:00”结尾。。。或者不是。在第二种情况下,这完全掌握在应用程序手中

我想我在这里真正做的是提出一个问题,日期和日期/时间对不同的人和在不同的环境中意味着不同的事情。有时指瞬间,有时指间隔。有时缺乏明确的精度意味着不精确,有时精度是隐含的


作为开发人员,我们必须在编写令人恼火的挑剔软件和对用户的日期/时间值的实际含义做出错误假设的软件之间划清界线。让用户正确使用的第一步是理解问题的复杂性。将变体重载为单一格式字符串是(将是)将问题掩盖起来。

我不知道是否有一个规范的答案,但您始终可以使用多个DateFormat对象,甚至可能是它们的列表,并使用一个不会引发ParseException的对象。谢谢,我已经开始使用4种不同的格式,两个用于带有/不带时间的默认实例,两个来自带有/不带时间的ISO格式。我在想,我是否应该测试字符串的长度,使之优先于日期+时间格式。您不能选择使用时间格式日期,因为所有日期都有时间。它将如何显示?您可以使用许多模式解析日期,但是您可以使用apache common lang的DateUtils并将解析模式传递给它。谢谢Stephen,我同意您的推理,但是如果为最终用户记录了一种格式,那么他们就没有理由不遵循该格式。当编写软件扩展时,问题就出现了,在这种情况下,只能接受一个参数,因此该参数必须在运行时隐式确定。@Brett Ryan-“…如果为最终用户记录了一种格式,那么他们就没有理由不遵循该格式”。您的用户关注文档吗?幸运的你:-)