自动日期/时间解析器,不指定格式

sar*_*n07 5 java datetime date-parsing

我正在搜索一个java库,它可以将字符串解析为POJO而无需指定格式.我研究了POjava.有没有其他类似的东西的图书馆?

DateTime dateTime = DateTimeParser.parse("21/02/13");

//If unclear use the cultural information passed
DateTime dateTime = DateTimeParser.parse("01/02/13", new Locale("en-us"));

//Should also work with time zones
DateTime dateTime = DateTimeParser.parse("2011/12/13T14:15:16+01:00");
Run Code Online (Sandbox Code Playgroud)

我发现以下链接具有相同问题的Java智能日期/时间解析器,但不是非常有用的答案.Joda或JChronic都没有做我想要的.如果我错了,请纠正我.

更新:

我说Joda没有解决我的目的的原因是,Joda希望字符串以ISO8601格式或您指定的任何格式解析,如"yyyyMMdd".我将无法对此格式进行硬编码,因为我需要处理多种格式.

我有解决方案,以消除美国或欧洲日期格式的模糊性,即mm/dd/yy或dd/mm/yy.假设我可以访问日期的时区,我可以确定它是美国还是欧洲格式?有人可以告诉我这样做吗?谷歌搜索但没有发现任何东西.

Ano*_*sse 8

问题是有些格式无法正确猜测.

一个简单的例子是01/02/2013.这是2月1日还是1月2日?或者甚至更糟:01/02/09

两种格式都存在.(谢谢你,英国和美国!)

因此,任何格式的猜测者都必须依靠这些格式的运气,或故意为这些格式失败.

python模块dateutil.parser可以作为尽力而为解析器的示例.对不起,我不知道java等价物.但你可能想看看Joda Time

http://labix.org/python-dateutil#head-b95ce2094d189a89f80f5ae52a05b4ab7b41af47

它实际上有参数dayfirstyearfirst.

然后有一个perl模块:

https://metacpan.org/pod/Time::ParseDate

您可以使用该模块中的优先级列表.盲目地尝试一些模式并不是很快(优化的词法分析器会更快),但它可能对你来说已经足够好了,除非你猜测数百万条记录的格式.


sar*_*n07 4

我找到了问题的答案。我使用了这个特殊的库POjava。本页介绍了如何在不指定任何格式的情况设置日期+时间字符串的格式。但是,为了使库正常工作,您必须指定日期顺序,例如日后跟月或月后跟日。