gpt4 book ai didi

java - 如何将 DateTimeFormatter 转换为 Timestamp sql 格式

转载 作者:行者123 更新时间:2023-12-02 08:43:22 25 4
gpt4 key购买 nike

我正在尝试使用 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[亚洲/加尔各答]”
<小时/>

你工作太辛苦了。

您的两个示例值均符合 ISO 8601标准。 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 混合在一起。 。相反,您应该使用正式取代旧类和 Joda-Time 的 java.time 类。

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

JDBC 4.2 需要支持OffsetDateTime但是,奇怪的是,并不是更常用的 InstantZonedDateTime 。所以转换。

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

myPreparedStatement.setObject( … , odt ) ;
<小时/>

你说:

I am trying to insert DateTimeFormatter to Timestamp

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

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

<小时/>

关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

要了解更多信息,请参阅 Oracle Tutorial 。并在 Stack Overflow 上搜索许多示例和解释。规范为JSR 310 .

Joda-Time项目,现在位于 maintenance mode ,建议迁移到java.time类。

您可以直接与数据库交换java.time对象。使用JDBC driver符合JDBC 4.2或稍后。不需要字符串,不需要 java.sql.* 类。 Hibernate 5 和 JPA 2.2 支持 java.time。

从哪里获取java.time类?

关于java - 如何将 DateTimeFormatter 转换为 Timestamp sql 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61242025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com