Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在LocalDate和sql.Date之间转换_Java_Date_Java 8_Converter_Java Time - Fatal编程技术网

Java 在LocalDate和sql.Date之间转换

Java 在LocalDate和sql.Date之间转换,java,date,java-8,converter,java-time,Java,Date,Java 8,Converter,Java Time,在java.sql.Date和LocalDate(Java8)之间转换的正确方法是什么 Java.sql.Date的Java8版本(及更高版本)内置了对LocalDate的支持,包括和 要从LocalDate转换为java.sql.Date,可以使用 java.sql.Date.valueOf( localDate ); 并将java.sql.Date转换为LocalDate: sqlDate.toLocalDate(); 时区: LocalDate类型不存储时区信息,而java.sql.D

java.sql.Date
LocalDate
(Java8)之间转换的正确方法是什么

Java.sql.Date的Java8版本(及更高版本)内置了对
LocalDate
的支持,包括和

要从
LocalDate
转换为
java.sql.Date
,可以使用

java.sql.Date.valueOf( localDate );
并将
java.sql.Date
转换为
LocalDate

sqlDate.toLocalDate();
时区:

LocalDate
类型不存储时区信息,而
java.sql.Date
则存储时区信息。因此,当使用上述转换时,结果取决于系统的默认时区(如注释中所指出的)

如果不希望依赖默认时区,可以使用以下转换:

Date now = new Date();
LocalDate current = now.toInstant()
                       .atZone(ZoneId.systemDefault()) // Specify the correct timezone
                       .toLocalDate();

问题本身的措辞对于那些也/特别希望从java.sql.Date转换为java.time.LocalDate的人来说是很好的,即使另一个问题有类似的答案。请注意,这使用系统默认时区来解释日期,这可能是您想要的,也可能不是您想要的。通常最好明确指定时区@3.你是对的。转换时可以使用yyyy-mm-dd格式:
java.time.LocalDate.parse(sqlDate.toString())
@maja,您能相应地更新您的答案吗?备选方案不正确,因为java.sql.Date.toInstant()抛出UnsupportedOperationException(在java 8中)UnsupportedOperationException是在java.util.Date中抛出的,而不是在java.sql.Date中抛出的,为避免此异常,请在sqlDate.toLocalDate()之前使用if(sqlDate instanceof java.sql.Date),如果日期为java.util.Date,请使用sqlDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();不知怎的,在那些java.sql.Date方法中有一个不必要的时区转换在进行——我为今天输入了LocalDate,并在数据库中为昨天输入了一个日期值