在Java中从未知日期字符串格式返回日期格式

6

可能是重复问题:
在Java中解析任何日期

假设我们有一个日期字符串,格式未知。以下是用户可能提供的可接受日期示例:

  • yyyy-MM-dd/yy-MM-dd
  • yyyy/MM/dd/yy/MM/dd
  • dd/MM/yyyy/dd/MM/yy
  • MM/dd/yyyy/MM/dd/yy`

是否有一个库可以接受一个日期字符串并返回一个可用于SimpleDateFormat或Joda Time的日期格式?

谢谢


6
很有意思能够看到一个解决方案如何容纳09/08/2010 ... 由于用户所在地区的差异,月份和日期的顺序均可以接受,那你将如何知道哪个是月份,哪个是日期呢? - sdolgy
3
你看过这个问题在Java中解析任何日期以及回答吗?不是简单的库,而是基于模式匹配和查找的代码,可以用来构建自己的工具。 - ewan.chalmers
@sdolgy,很棒的问题。应该询问用户是否正确解析了日期。我认为用户应该接受哪个结果是正确的。 - Buhake Sindi
那个问题(月份或日期)也在我链接的另一个问题中得到了解答。 - ewan.chalmers
“dd/MM/yyyy”是一个非常不常见的格式(我认为甚至不是官方格式)。通常,对于这种模式,使用“-”作为分隔符。 - BalusC
显示剩余3条评论
1个回答

0
作为一个简单的解决方案:我将对提供的输入应用每个日期格式以获取一个日期对象,然后使用相同的日期格式打印日期对象。如果输入和输出对于某个日期格式是相同的,则该日期格式是一个候选项。

  1. 这是一种冗长的对象初始化和比较技术,是不必要的。
  2. 这并没有解决“03/04/2010”是指4月3日还是3月4日的问题。
- Buhake Sindi
你所说的与你在评论中解释的相矛盾。你说用户应该决定可接受的结果。 - salman.mirghasemi
@salman.mirghasemi,说得对,我的意思是,如果我加上4月3日,他的解决方案找到了4月4日,他的输出与日期对象比较检查是有效的,没有办法显示不明确的情况并通知用户。 - Buhake Sindi
用户可以选择DD/MM/YYYY和MM/DD/YYYY中的任意一种格式。如果您想使其更加用户友好,可以通过询问以下问题来显示每种情况的长格式:“您是指3 April 2010还是4 March 2010?” - salman.mirghasemi
基本上,创建一个验证器来提出建议。此外,该答案并未解决根据日期字符串找到“适当”日期格式的问题。它假设我已经定义了日期格式列表(这可能很长,因为有一些格式取决于地区和语言环境等因素)。 - Buhake Sindi
即使在这种情况下,拥有可能的日期格式列表(尽管不完整)也可以提高推断的质量。 - salman.mirghasemi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接