Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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/9/google-apps-script/5.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
将Joda LocalDate或java.util.Date转换为一天开始时有时间的LocalDateTime_Java_Datetime_Jodatime - Fatal编程技术网

将Joda LocalDate或java.util.Date转换为一天开始时有时间的LocalDateTime

将Joda LocalDate或java.util.Date转换为一天开始时有时间的LocalDateTime,java,datetime,jodatime,Java,Datetime,Jodatime,我正在使用Joda 2.5 将Joda LocalDate转换为LocalDateTime时遇到问题 正如我所说,我能够将LocalDate转换为DateTime,时间为StartOfDay。我希望通过LocalDateTime对象实现相同的功能 我的代码是: 假设日期来自不同的REST服务,例如 现在,该日期被传递给另一个服务,如下所示: 我想要LocalDateTime对象,因为我正在mysql中存储这个LocalDateTime作为时间戳 请提供将LocalDate中的对象转换为Local

我正在使用Joda 2.5

将Joda LocalDate转换为LocalDateTime时遇到问题

正如我所说,我能够将LocalDate转换为DateTime,时间为StartOfDay。我希望通过LocalDateTime对象实现相同的功能

我的代码是:

假设日期来自不同的REST服务,例如

现在,该日期被传递给另一个服务,如下所示:

我想要LocalDateTime对象,因为我正在mysql中存储这个LocalDateTime作为时间戳

请提供将LocalDate中的对象转换为LocalDateTime对象的解决方案。

例如:“2015-02-01”到“2015-02-01 00:00:01” YYYY-MM-DD至YYYY-MM-DD HH:MM:SS:zzz


但不是LocalDate-to-DateTime

一旦你消除了时区异常,你可以假设每天从午夜开始,所以使用:

LocalDateTime localDateTime = localDate.toLocalDateTime(LocalTime.MIDNIGHT);
不清楚你为什么想在午夜后1秒结束。如果您真的需要,请创建自己的表示该时间的常量
LocalTime
,并在上述代码中使用它而不是
MIDNIGHT

还要注意的是,如果您确实有一个
日期
,您可能已经丢失了信息。听起来传入的数据实际上是一个字符串-最好直接将其解析为
LocalDate
,以避免时区可能导致问题。

tl;博士 java.time 该项目现在正在进行中,团队建议迁移到类。看

解析输入字符串

LocalDate ld = LocalDate.parse( "2015-02-05" ) ;
未分区 如果您的业务问题与UTC或时区之间没有任何偏移,并且不是时间线上的特定时刻,则通过将其转换为时间线来获取一般24小时工作日的第一个时刻

ldt.toString():2015-02-05T00:00

要将其存储在数据库中的数据类型列中,类似于SQL标准类型的无时区时间戳,请使用符合JDBC 4.2及更高版本的java.TIME对象。最好与数据库交换对象,而不仅仅是字符串

myPreparedStatement.setObject( … , ldt ) ;
……还有

LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
LocalDateTime ldt = myResultSet.getObject( … , ZonedDateTime.class ) ;
Instant instant = myResultSet.getObject( … , Instant.class ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
分区 如果您的业务问题确实需要偏移或分区,则必须指定以获取时间线上的实际点

一天中的第一个时刻并不总是00:00:00。异常情况,例如,一天可能在另一个时间开始,例如01:00:00。让java.time通过调用来确定一天中的第一个时刻

zdt.toString():2015-02-05T00:00+01:00[非洲/突尼斯]

如上所示,将java.time对象与数据库交换。如果试图记录历史中的实际时刻,则数据库列的类型应与SQL标准
时区时间戳的类型相同

myPreparedStatement.setObject( … , zdt ) ;
……还有

LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
LocalDateTime ldt = myResultSet.getObject( … , ZonedDateTime.class ) ;
Instant instant = myResultSet.getObject( … , Instant.class ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
您的驱动程序和/或数据库可能会将此类分区值转换为UTC值。或者你可以自己明确地这样做。提取始终以UTC为单位的
即时
对象

myPreparedStatement.setObject( … , zdt.toInstant() ) ;
……还有

LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
LocalDateTime ldt = myResultSet.getObject( … , ZonedDateTime.class ) ;
Instant instant = myResultSet.getObject( … , Instant.class ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android(仅供参考),该项目现在正在进行中,建议迁移到类。请参阅。