【发布时间】:2021-07-05 19:03:13
【问题描述】:
我收到此代码错误:
SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd MMMM HH:mm yyyy",myDateFormatSymbols);
sdf.parse("понеділок 12 квітень 07:00 2021");
这是
"Monday 12 April 07:00 2021"。
问题是,每当我将日期从星期一更改为星期二 ("вівторок") 时,我都不会收到此错误,并且代码可以正常工作。
这是myDateFormatSymbols的代码:
private final static DateFormatSymbols myDateFormatSymbols = new DateFormatSymbols(){
@Override
public String[] getWeekdays(){
return new String[]{"понеділок","вівторок", "середа", "четвер", "пятниця", "субота", "неділя"};
}
@Override
public String[] getMonths() {
return new String[]{...};
}
}
所有月份和工作日都正常工作,似乎这个错误只发生在星期一。
【问题讨论】:
-
我建议你不要使用
SimpleDateFormat和Date。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的LocalDateTime和DateTimeFormatter。 -
@OleV.V.实际上,我在 java.time 中尝试过但没有成功。我使用了乌克兰语的
Locale(根据谷歌翻译的猜测):new Locale.Builder().setLanguage( "uk" ).setRegion( "UA" ).build();。我收到DateTimeParseException说“无法在索引 13 处解析”(月份名称)。我粘贴了从谷歌翻译中复制的月份名称Квітень的变体,将“四月”翻译成乌克兰语。我验证了понеділок=Monday= 2021-04-12。如果您可以看到已删除的答案,see mine。也许你可以试一试。 -
@k4rnaj1k 这个输入字符串是什么语言?当您的代码成功运行时,
Locale的作用是什么? -
我认为您正在尝试解析乌克兰语字符串,而您的字符串在 п'ятниця 中没有撇号(Friday ) Java 认为应该存在,这就是为什么您需要提供自己的日期名称。它是否正确?你创建
myDateFormatSymbols还有其他原因吗? -
您使用的是哪个 Java 版本?特别是对于 Java 7、8 和 9,解决方案可能会有所不同。
标签: java simpledateformat java-time dayofweek datetime-parsing