在Java中,解析日期没有巴西语言环境
我需要解析这个日期-2020年11月11日09:04
我创建
BrazilLocale = Locale.Builder().setLanguage("pt").setRegion("BR").build()
和此模式dd MMM yyyy hh:mm
,但无效。
例如,我们可以尝试:
Locale brazilLocale = new Locale.Builder().setLanguage("pt").setRegion("BR").build();
DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("dd MMM yyyy hh:mm", brazilLocale);
String stringToParse = "11 de Ago de 2020 09:04";
LocalDateTime dateTime = LocalDateTime.parse(stringToParse, formatter);
System.out.println(dateTime);
预期输出:2020-08-11T09:04
。
观察到的输出:
线程“ main”中的异常java.time.format.DateTimeParseException: 文本'11 de Ago de 2020 09:04'无法在索引3处解析
此行中发生异常:
LocalDateTime dateTime = LocalDateTime.parse(stringToParse, formatter);
当我尝试使用老式的SimpleDateFormat
时,我得到了
线程“主”中的异常java.text.ParseException:无法解析的日期: “ 2020年11月11日09:04”
答案 0 :(得分:2)
您的问题之一是葡萄牙语中的“ de”使日/月与年之间不相关。 Java无法理解这一点,因此您必须在模式中对其进行“硬编码”。 hh
的意思是“ pm-hour-hour-hour-am-pm”,但您未指定“ am”或“ pm”,因此您最有可能使用HH
。这是一个工作示例:
Locale brazilLocale = new Locale("pt", "BR");
final DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("dd 'de' MMM 'de' yyyy HH:mm")
.toFormatter(brazilLocale);
System.out.println(LocalDateTime.parse("11 de ago de 2020 09:04", formatted));
产生2020-08-11T09:04