Java 用不同的语言处理月份名称
我输入了许多不同格式的日期。我基本上是在尝试将所有不同的格式标准化为ISO8601格式 如果日期包含一个月名,例如三月,那么我将使用以下函数获取月号,例如03Java 用不同的语言处理月份名称,java,datetime,translation,java-time,date-parsing,Java,Datetime,Translation,Java Time,Date Parsing,我输入了许多不同格式的日期。我基本上是在尝试将所有不同的格式标准化为ISO8601格式 如果日期包含一个月名,例如三月,那么我将使用以下函数获取月号,例如03 month = String.valueOf(Month.valueOf(month.toUpperCase()).getValue()); 无论如何,我遇到的问题是,月份名称使用了许多不同的语言,没有说明它们将使用什么语言。运行上述函数时出现以下错误: Caused by: java.lang.IllegalArgumentExcep
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.util.Locale
的所有可用值,使用java.time.format.DateTimeFormatter
并尝试解析月份,直到找到一个有效的月份:
String input = "März 2010";
// formatter with month name and year
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("MMMM yyyy");
Month month = null;
for (Locale loc : Locale.getAvailableLocales()) {
try {
// set the locale in the formatter and try to get the month
month = Month.from(fmt.withLocale(loc).parse(input));
break; // found, no need to parse in other locales
} catch (DateTimeParseException e) {
// can't parse, go to next locale
}
}
if (month != null) {
System.out.println(month.getValue()); // 3
}
在上面的代码中,月份将是
month.MARCH
,输出将是3
为什么不使用标准Java库中提供的支持解析日期呢?您需要解析的输入到底是什么?@JBNizet我已经更新了添加输入数据的问题。正如您所看到的,格式都非常不同。关于为什么我没有使用标准Java库中提供的支持:我不确定如何使用给定的输入。另外,不确定Java.time.Month如何不是标准的Java.OK。如何解析它们?你怎么知道这是什么语言?您如何知道每个输入的格式是什么?你怎么知道胡里奥是一个月而不是一天?@JBNizet我编译了一些模式(例如,^\d{4}$,^(\d{4}-\d{2}-\d{2}),\\w+\\s+\\d{4},等等)。我要注意的一点是,输入数据至少与其中一种模式匹配,并且除了转换月份名称不是英文的日期之外,其他一切都可以工作。所有其他方面都已经解决了,除了上面OP中的例外情况。@sruetti,上面文章中的输入数据涵盖了文件中的所有格式。我很想处理更好的数据,但不幸的是,这不会发生。我的工作是标准化所有这些数据并创建更好的数据:),如果您需要经常这样做,您可以为每个地区设置月份名称的格式,并构建地图。您可以将TreeMap
与忽略大小写和重音的Collator
一起使用。