Java 如何将DateTimeFormatter转换为时间戳sql格式

Java 如何将DateTimeFormatter转换为时间戳sql格式,java,jdbc,Java,Jdbc,我试图使用JDBC将DateTimeFormatter插入表Tab1中的时间戳 String d="2020-03-19T21:19:32:921Z"; DateTimeFormatter dateTimeFormatterUtc = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss:SSSr3"); DateTime tD = dateTimeFormatterUtc.parseDateTime(d); I have set the dat

我试图使用JDBC将DateTimeFormatter插入表Tab1中的时间戳

String d="2020-03-19T21:19:32:921Z";
 DateTimeFormatter dateTimeFormatterUtc = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss:SSSr3");
 DateTime tD = dateTimeFormatterUtc.parseDateTime(d);
 I have set the date into my dao
 dao.setTRD(transactionOpenDateTime);


 String INSERT_AUDIT_SQL1= "insert into Tab1 (TD) value (?);";
 PreparedStatement preparedStatement = con.prepareStatement(INSERT_AUDIT_SQL1);
 preparedStatement.setDate(1,(Date) dao.getTRD().toDate());
我得到的错误如下

java.lang.IllegalArgumentException: Invalid format: "2020-04-16T08:12:16.016+05:30[Asia/Calcutta]" is malformed at ".016+05:30[Asia/Calcutta]"
Exception in thread "main" java.lang.NullPointerException
    at com.manthan.dao.ConnectionDao.main(ConnectionDao.java:60)

示例输入与错误消息中显示的值不匹配:

  • “2020-03-19T21:19:32:921Z”
    是您给定的输入
  • “2020-04-16T08:12:16.016+05:30[亚洲/加尔各答]”
    将在您的错误消息中报告

你工作太辛苦了

两个示例值都符合标准。默认情况下,java.time类在解析/生成文本时使用这些标准格式。因此,无需指定格式化模式

Instant Instant = Instant.parse( "2020-03-19T21:19:32:921Z" ) ;

ZonedDateTime zdt = ZonedDateTime.parse( "2020-04-16T08:12:16.016+05:30[Asia/Calcutta]" ) ;
您似乎将旧的日期时间类与最早的Java版本捆绑在一起。相反,您应该使用正式取代遗留类和Joda time的java.time类

将java.time对象传递给,而不是将
java.util.Date
传递给
PreparedStatement::setDate

4.2需要支持,但奇怪的是,不是更常用或更复杂的。所以转换

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;
OffsetDateTime odt = zdt.toOffsetDateTime() ;

myPreparedStatement.setObject( … , odt ) ;

你说:

我正在尝试将DateTimeFormatter插入时间戳

DateTimeFormatter
用于生成表示日期时间对象中的值的文本。此类与与数据库交换信息无关

java.sql.Timestamp
类是您不应该再使用的遗留日期时间类之一。替换为
OffsetDateTime
(可选为
Instant


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

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

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

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

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • Java9添加了一些次要功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类

    • 对于早期的Android(感谢快速回复..请解释一下..因为我是java新手..提前感谢。@RKC所有这些都已经在Stack Overflow上讨论过很多次了。搜索了解更多信息。我给了您所有需要的部分。