Java 从LocalDateTime类获取时间值不会编译
我试图从Java 从LocalDateTime类获取时间值不会编译,java,Java,我试图从java.time.LocalDateTime类中的日期方法中获取日期和时间值。我已经将该值存储在一个变量中,我想用它来设置SQL查询的参数,但我无法提取该值。代码无法编译。我试过这个: LocalDateTime dt = LocalDateTime.now(); query.setParameter("test", Date.valueOf(dt)); //error thrown here. I want to extract the current date
java.time.LocalDateTime
类中的日期方法中获取日期和时间值。我已经将该值存储在一个变量中,我想用它来设置SQL查询的参数,但我无法提取该值。代码无法编译。我试过这个:
LocalDateTime dt = LocalDateTime.now();
query.setParameter("test", Date.valueOf(dt)); //error thrown here. I want to extract the current date and time ( hours, minutes, seconds) value stored in the dt variable
没有日期。valueOf(LocalDateTime),只有 您需要直接使用
LocalDate
,或者通过调用LocalDateTime
将其转换为LocalDate
请注意,java.sql.Date
实际上并不用于表示时间组件,如小时、分钟、秒等。如果同时需要(日期和时间),则使用,它甚至具有所需的方法:
只需附带说明:时间类是。没有日期。
Date.valueOf(LocalDateTime)
,只有
您需要直接使用LocalDate
,或者通过调用LocalDateTime
将其转换为LocalDate
请注意,java.sql.Date
实际上并不用于表示时间组件,如小时、分钟、秒等。如果同时需要(日期和时间),则使用,它甚至具有所需的方法:
只需补充说明:仅用于time的类是。您应该使用普通的
java.time
解决方案,而与java.util.Date周围过时的API没有任何关系Date.valueOf(LocalDate)
的存在只是为了使遗留代码与现代datetime API兼容(即java.time
)
既然你还没有澄清你的问题是关于什么时间的,我可以展示不同的可能性
请注意,LocalDateTime
不适合捕获时间戳,因为它不包含有关时区或偏移量的信息,但如有必要,您可以添加一个:
public static void main(String[] args) {
// get "now" without any time zone or offset information
LocalDateTime now = LocalDateTime.now();
// extract the date part
LocalDate today = now.toLocalDate();
// extract the time-of-day part
LocalTime timeOfNow = now.toLocalTime();
// then print the single parts (date and time of day)
System.out.println("Today is " + today + " and now is " + timeOfNow + " that day");
// print the full timestamp
System.out.println("Full date and time are now " + now);
// or print the epoch milliseconds (A ZONE OR AN OFFSET IS NEEDED THEN)
System.out.println("Moment in time of now is "
+ now.toInstant(ZoneOffset.UTC).toEpochMilli() + " in UTC");
}
它的输出是(请参见执行时间的输出;-))
今天是2020-08-13,现在是那天的15:04:46.728
完整日期和时间现在是2020-08-13T15:04:46.728
现在的时刻是UTC的1597331086728
您应该使用普通的java.time
解决方案,与java.util.Date
周围过时的API没有任何关系Date.valueOf(LocalDate)
的存在只是为了使遗留代码与现代datetime API兼容(即java.time
)
既然你还没有澄清你的问题是关于什么时间的,我可以展示不同的可能性
请注意,LocalDateTime
不适合捕获时间戳,因为它不包含有关时区或偏移量的信息,但如有必要,您可以添加一个:
public static void main(String[] args) {
// get "now" without any time zone or offset information
LocalDateTime now = LocalDateTime.now();
// extract the date part
LocalDate today = now.toLocalDate();
// extract the time-of-day part
LocalTime timeOfNow = now.toLocalTime();
// then print the single parts (date and time of day)
System.out.println("Today is " + today + " and now is " + timeOfNow + " that day");
// print the full timestamp
System.out.println("Full date and time are now " + now);
// or print the epoch milliseconds (A ZONE OR AN OFFSET IS NEEDED THEN)
System.out.println("Moment in time of now is "
+ now.toInstant(ZoneOffset.UTC).toEpochMilli() + " in UTC");
}
它的输出是(请参见执行时间的输出;-))
今天是2020-08-13,现在是那天的15:04:46.728
完整日期和时间现在是2020-08-13T15:04:46.728
现在的时刻是UTC的1597331086728
您在谈论哪个时间值?小时、分钟、秒等(仅代表一天中的时间部分)或以毫秒为单位的时间(代表日期和时间)?请阅读并相应增强您的问题。为什么不包括给您的编译器错误?(注意:编译器不会“抛出”错误,术语真的很重要)。如果您只想创建localDateTime的日期,您可以这样做。Date-Date=Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());你在说什么时间价值?小时、分钟、秒等(仅代表一天中的时间部分)或以毫秒为单位的时间(代表日期和时间)?请阅读并相应增强您的问题。为什么不包括给您的编译器错误?(注意:编译器不会“抛出”错误,术语真的很重要)。如果您只想创建localDateTime的日期,您可以这样做。Date-Date=Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());将Date.valueOf(LocalDate)代码>返回日期和时间还是仅返回日期?我尝试了toLocalDate
,但仍然出错。你能通过更新答案写出代码块吗?@Theman如果你想要日期和时间,那么你基本上使用了错误的类。我刚刚更新了答案,它现在提到了你需要的课程。这和预期的一样有效。ThanksWillDate.valueOf(LocalDate)代码>返回日期和时间还是仅返回日期?我尝试了toLocalDate
,但仍然出错。你能通过更新答案写出代码块吗?@Theman如果你想要日期和时间,那么你基本上使用了错误的类。我刚刚更新了答案,它现在提到了你需要的课程。这和预期的一样有效。谢谢