public LocalDateTime parseDate(String strDate, String strTime) {
strTime = strTime + ":00";
System.out.println("Date: " + strDate);
System.out.println("Time: " + strTime);
LocalDate date = LocalDate.now();
DateTimeFormatter dtfForDate = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.parseDefaulting(ChronoField.YEAR, date.getYear())
.appendPattern("d['th']['st']['rd']['nd'] MMM")
.toFormatter(Locale.ENGLISH);
DateTimeFormatter dtfForTime = DateTimeFormatter.ofPattern("H:m:s", Locale.ENGLISH);
LocalDateTime ldt = LocalDate.parse(strDate, dtfForDate)
.atTime(LocalTime.parse(strTime, dtfForTime));
System.out.println("Local Date Time: " + ldt);
return ldt;
}
Date: 1st June
Time: 9:15:00
使用下面的模式来兼顾这两种情况:三个字母的缩写月份名称和完整的月份名称:
.appendPattern("d['th']['st']['rd']['nd'] [MMMM][MMM]")
演示:
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
System.out.println(parseDate("1st June", "9:15:00"));
System.out.println(parseDate("1st Jun", "9:15:00"));
}
public static LocalDateTime parseDate(String strDate, String strTime) {
LocalDate date = LocalDate.now();
DateTimeFormatter dtfForDate = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.parseDefaulting(ChronoField.YEAR, date.getYear())
.appendPattern("d['th']['st']['rd']['nd'] [MMMM][MMM]")
.toFormatter(Locale.ENGLISH);
DateTimeFormatter dtfForTime = DateTimeFormatter.ofPattern("H:m:s", Locale.ENGLISH);
LocalDateTime ldt = LocalDate.parse(strDate, dtfForDate).atTime(LocalTime.parse(strTime, dtfForTime));
return ldt;
}
}
输出:
2021-06-01T09:15
2021-06-01T09:15
问题内容: 我只是想将Java 8中的日期字符串转换为DateTime对象。运行以下行时: 我收到以下错误: 语法与此处建议的语法相同,但有例外。我正在使用JDK-8u25。 问题答案: 事实证明Java不接受裸露的Date值作为DateTime。使用LocalDate代替LocalDateTime解决了此问题:
我得到以下错误: 语法与这里所建议的相同,但我有一个例外。我使用的是。
问题内容: 我想在客户端验证日期,因此编写了以下代码。但是我没有得到异常,而是得到了2月31日日期字符串的正确日期对象,这显然是无效的日期。 输出 :2015-02-28T11:30:59 有谁知道为什么要解析这个日期而不是抛出异常。 问题答案: 您只需要严格。 解析文本字符串分为两个阶段。阶段1是根据添加到构建器中的字段进行的基本文本解析。阶段2将解析的字段值对解析为日期和/或时间对象。此样式用
我不像本例中那样使用以周为基础的年份。 最后,与这里不同的是,我使用的是LocalDateTime,所以时区应该不是问题。但是,由于这可能是DateTimeFormatter中的一个bug,我尝试将格式化程序传递为'formatter.WithZone(zoneId.SystemDefault())'(建议的解决方法),结果导致了相同的异常。
问题是: 格式如下:2015-10-23T03:34:40 当我试图这样解决问题时: 我在另一个地方遇到问题。Java需要在我的服务calass中将type更改为String类型: 如果我将更改为,则无法使用方法plusDay(1):((( 我也尝试了这样的方法: 格式与字符相同' T' 2018-09-13T05:42:28 这种方式也不适合我: 因为a不能将类型改为字符串 这种方式不起作用,因