【发布时间】:2017-09-16 22:44:12
【问题描述】:
我输入了许多不同格式的日期。我基本上是在尝试采用所有不同的格式并将它们标准化为 ISO 8601 格式。
如果日期包含月份名称,例如 March,那么我使用以下函数来获取月份编号,例如03.
month = String.valueOf(Month.valueOf(month.toUpperCase()).getValue());
无论如何,我遇到的问题是月份名称有多种不同的语言,没有说明它们将是什么语言。运行上述函数时出现以下错误:
Caused by: java.lang.IllegalArgumentException: No enum constant java.time.Month.AUGUSTI
at java.lang.Enum.valueOf(Enum.java:238)
at java.time.Month.valueOf(Month.java:106)
是否有任何库可以处理多种不同语言的月份名称,返回数值,甚至只是将月份名称翻译成英文?
这是输入日期的示例:
1370037600
1385852400
1356994800
2014-03-01T00:00:00
2013-06-01T00:00:00
2012-01-01
2012
May 2012
März 2010
Julio 2009
【问题讨论】:
-
为什么不使用标准 Java 库中提供的支持来解析日期?您需要解析的输入到底是什么?
-
@JBNizet 我已经更新了添加输入数据的问题。如您所见,格式都非常不同。关于为什么我不使用标准 Java 库中提供的支持:我不确定如何使用给定的输入来做到这一点。另外,不确定 Java.time.Month 如何不是标准 Java。
-
好的。你如何解析它们?你怎么知道语言是什么?你怎么知道每个输入的格式是什么?你怎么知道胡里奥是一个月而不是一天?
-
@JBNizet 我编译了一些模式(例如,^\d{4}$、^(\d{4}-\d{2}-\d{2})、\\w+\ \s+\\d{4} 等)。我要注意的一件事是,输入数据确实匹配至少一种模式,并且除了在月份名称不是英文时转换日期之外,一切正常。除上述 OP 中的例外情况外,所有其他方面都已弄清楚。
-
@sruetti,上述帖子中的输入数据涵盖了文件中的所有格式。我很想处理更好的数据,但不幸的是这不会发生。我的工作是标准化所有这些数据并创建更好的数据:)
标签: java datetime translation java-time date-parsing