我想像这样解析像2011-11-30
这样的日期字符串:
LocalDateTime.parse("2011-11-30", DateTimeFormatter.ISO_LOCAL_DATE)
但我得到以下例外:
java.time.format.DateTimeParseException: Text '2011-11-30' could not be parsed:
Unable to obtain LocalDateTime from TemporalAccessor
如果我传递日期和时间字符串,一切都按预期工作:
LocalDateTime.parse("2011-11-30T23:59:59", DateTimeFormatter.ISO_LOCAL_DATE_TIME)
如何将2011-11-30
之类的日期解析为LocalDateTime(默认时间)?
答案 0 :(得分:2)
正如@JB Nizet建议的那样,以下作品
"album" : "Move Along", "albumpos" : 1, "artist" : "The All American Rejects", "bitrate" : 128, "duration" : 195, "playing" : true, "position" : 101, "resolvedBy" : "DatabaseResolver", "score" : 1.0, "track" : "Track 01"
如何将2011-11-30之类的日期解析为LocalDateTime(默认时间)?
LocalDate localDate = LocalDate.parse("2011-11-30", DateTimeFormatter.ISO_LOCAL_DATE);
LocalDateTime localDateTime = localDate.atTime(23, 59, 59);
System.out.println(localDateTime); // 2011-11-30T23:59:59
LocalDate
LocalDateTime
方法设置默认时间注意:使用atTime()
对于DateTimeFormatter.ISO_LOCAL_DATE
来说是多余的,请参阅API LocalDate#parse()
答案 1 :(得分:0)
下面的示例使用了一些幻数,应该避免(What is a magic number, and why is it bad?)。
而不是使用atTime方法(小时,分钟,秒),
LocalDate localDate = LocalDate.parse("2011-11-30", DateTimeFormatter.ISO_LOCAL_DATE);
LocalDateTime localDateTime = localDate.atTime(23, 59, 59);
你可以使用LocalTime常量,例如LocalTime.MAX,(23:59:59),LocalTime.MIN(00:00:00),LocalTime.MIDNIGHT(23:59:59) )或LocalTime.NOON(12:00:00)
LocalDate localDate = LocalDate.parse("2011-11-30", DateTimeFormatter.ISO_LOCAL_DATE);
LocalDateTime localDateTime = LocalDateTime.of(localDate, LocalTime.MIN);
对于可维护性和交叉引用更好。
答案 2 :(得分:0)
不幸的是,所有现有答案仅部分正确。它们缺少现代日期时间API的以下重要方面:
LocalDateTime
的实例,以获取具有当前时间的LocalDateTime
的新实例OP发表的问题:
如何将日期为2011-11-30的日期解析为LocalDateTime(使用 默认时间)?
您的方法有两个问题:
由于要解析日期字符串,因此应该使用LocalDate#parse
而不是LocalDateTime#parse
。
由于日期字符串已经在ISO模式中,因此您无需显式使用DateTimeFormatter
来指定此模式,因为LocalDate.parse
默认使用此模式。
除了这两个问题之外,您将需要使用LocalDateTime#with
将当前时间应用于LocalDateTime
的实例,以获取当前时间的LocalDateTime
的新实例。 / p>
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class Main {
public static void main(String[] args) {
// No need to specify DateTimeFormatter as the string is already in ISO format
LocalDate date = LocalDate.parse("2011-11-30");
System.out.println(date);
// Get LocalDateTime from LocalDate
LocalDateTime ldt = date
.atStartOfDay() //Convert to LocalDateTime with 00:00
.with(LocalTime.now()); //Adjust to current time
System.out.println(ldt);
}
}
输出:
2011-11-30
2011-11-30T11:53:39.103150
注意:从 Trail: Date Time 了解更多有关现代日期时间API的信息。