Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用不同的语言处理月份名称_Java_Datetime_Translation_Java Time_Date Parsing - Fatal编程技术网

Java 用不同的语言处理月份名称

Java 用不同的语言处理月份名称,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

我输入了许多不同格式的日期。我基本上是在尝试将所有不同的格式标准化为ISO8601格式

如果日期包含一个月名,例如三月,那么我将使用以下函数获取月号,例如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.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
一起使用。