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如果你想要日期和时间,那么你基本上使用了错误的类。我刚刚更新了答案,它现在提到了你需要的课程。这和预期的一样有效。ThanksWill
Date.valueOf(LocalDate)返回日期和时间还是仅返回日期?我尝试了
toLocalDate
,但仍然出错。你能通过更新答案写出代码块吗?@Theman如果你想要日期和时间,那么你基本上使用了错误的类。我刚刚更新了答案,它现在提到了你需要的课程。这和预期的一样有效。谢谢