【发布时间】:2013-07-16 13:41:52
【问题描述】:
我需要能够将日期的所有可能字符串表示形式转换为 Date 对象。我知道这不是一项微不足道的任务,我主要寻求指导,因为我相信没有“单线”解决方案。
只有一个可能的输入类的当前示例:return new SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH).parse(input);
为了澄清我的问题,这里有一些可能的字符串输入:
- 30-08-2011
- 25.06.2011
- 2011 年 6 月 15 日
- 01-07-11
- 19-9-2011
数据是由第三方提供的,所以我对此无能为力。我有一些关于检查分隔符是什么并据此选择正确格式的想法。
感谢任何帮助。
问候。
编辑:我可以访问用户的区域设置,这样我实际上可以区分日期和月份部分。或者更确切地说,我可以访问日期的语言环境。
【问题讨论】:
-
您在某种程度上陷入了不确定的解决方案中。例如 05-06-2011 2011 年 5 月 6 日或 2011 年 6 月 5 日。对不起,伙计。
-
我可以访问用户的语言环境,我会用这个更新 OP。
-
你可以一个接一个地尝试,直到你得到一个日期(并希望它是正确的,正如@Pete 指出的那样)或定义一个清晰的第三方接口。还有一个问题,为什么发送不同的日期格式。
-
不可取但仍然是解决方案:将所有可能的格式放入字符串数组中,并尝试解析日期字符串,直到成功或用完数据格式(在这种情况下重新抛出异常)。
-
@UwePlonus 它们是经过 OCR 的发票。并且尝试多种格式不会导致 ParseExceptions 形式的开销吗?