很抱歉这个问题是基本的,并且无法展示我尝试过的东西。但是到目前为止,我很难理解Javas DateTimeFor物质和LocalDateTime。
代码不起作用,但显然在我不知道的一些更改之前一直在工作(我刚刚把这段代码扔在我的腿上):
public getDateForIception() {
String tid = driver.findElement(By.cssSelector("div.hendelse-tid.hb-tekst--ingenBryting"))
.getText().replaceAll("(?<=[A-Za-z]{3})[.a-z]{1,2}", "");
if(tid.split("\\.")[0].length() == 1) {
tid = "0" + tid;
}
return DatoUtils.parseDatoLocalDateTime(tid, "dd. MMM yyyy HH:mm");
}
不完全确定替换字符等的意义,但在这种情况下,if()没有执行,“tid”变量没有改变。只是将其保留在此处以供可能的参考。
public static LocalDateTime parseDatoLocalDateTime(String datoString, String pattern) {
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern(pattern)
.toFormatter(Locale.forLanguageTag("no"));
return LocalDateTime.parse(datoString, formatter);
}
我怀疑从页面读取的格式发生了一些变化,因此解析失败。但错误消息对我来说意义不大:
java.time.format.DateTimeParseException: Text '15. jun 2022 19:51' could not be parsed at index 4
想法或解决方案受到高度赞赏。
在格式化程序生成器中,挪威语由此行设置
.toFormatter(Locale.forLanguageTag("no"));
您可以使用语言标签en
将语言环境设置为英语,或者您应该提供挪威的月份名称(末尾有一个点,用于缩短变体),例如jan.
、feb.
、mar.
、apr.
、mai
(点不是必需的,因为它是完整的月份名称)等。
编辑:经过额外的研究,我发现你可以解析挪威月份,而不需要在末尾加上一个点。要做到这一点,你需要使用一个月的独立格式(LLL而不是MMM)。
因此,您的代码将如下所示
public getDateForIception() {
String tid = driver.findElement(By.cssSelector("div.hendelse-tid.hb-tekst--ingenBryting"))
.getText().replaceAll("(?<=[A-Za-z]{3})[.a-z]{1,2}", "");
if(tid.split("\\.")[0].length() == 1) {
tid = "0" + tid;
}
return DatoUtils.parseDatoLocalDateTime(tid, "dd. LLL yyyy HH:mm");
}
public static LocalDateTime parseDatoLocalDateTime(String datoString, String pattern) {
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern(pattern)
.toFormatter(Locale.forLanguageTag("no"));
return LocalDateTime.parse(datoString, formatter);
}