【问题标题】:Error convert in Java Timestamp, not proper transform from Mysql 8.26Java时间戳中的错误转换,不是从Mysql 8.26正确转换
【发布时间】:2022-06-29 23:55:46
【问题描述】:

我正在尝试使用字符串到时间戳的转换来提取对象形式的一般情况向量。 在这种情况下,mysql值具有以下格式:“2022-06-29 10:08:22” 但是当我打印字符串时,它具有以下格式:“2022-06-29T10:08:22”。在这里,我们注意到输出包含一个“T”字符。当我尝试使用时间戳进行转换时,出现错误。

代码:

data = new Object[0][0];   
data[0][0]=rs.getObject(0);    TimeStamp
createTimestampt= Timestamp.valueOf((String)data[0][0]));

在这种情况下,类 java.sql.Timestamp 是否过时?或者我错过了哪里?

注意:Ojbect rs 是 java.sql.ResultSet 的一个实例。出于明显的原因,不包括所有代码。但是问题的本质已经讨论过了。

谢谢

谢谢

【问题讨论】:

  • 您的列在 MySQL 中的确切地说是什么数据类型?

标签: java mysql


【解决方案1】:

tl;博士

您忽略了提及您的列的数据类型。所以我不能告诉你使用哪一个。

要么:

OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;

… 或:

LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;

java.time

永远不要使用遗留类Timestamp。它在几年前被现代 java.time 类所取代。具体来说,替换为InstantOffsetDateTime

JDBC 4.2 及更高版本要求 JDBC 驱动程序支持 java.time 类。

OffsetDateTime

假设您正在访问类似于 SQL 标准类型 TIMESTAMP WITH TIME ZONE 的数据类型的列,请检索 OffsetDateTime

OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;

写入数据库。

myPreparedStatement.setObject( … , odt ) ;

LocalDateTime

如果您访问的数据库列类型类似于 SQL 标准类型 TIMESTAMP WITHOUT TIME ZONE,请使用 LocalDateTime 类。

格式

你说:

mysql值的格式如下:“2022-06-29 10:08:22”

不,不准确。日期时间类型的数据库列不是文本,因此没有格式。

您看到的是根据该列中表示的值生成的文本。

如果您按上述指示检索OffsetDateTime,则不涉及任何文本。

您可以从 OffsetDateTime 对象生成文本。

  • 如需标准 ISO 8601 格式,请致电toString
  • 对于本地化格式,请使用DateTimeFormatter.ofLocalizedDateTime
  • 对于自定义格式,请使用DateTimeFormatter.ofPattern

所有这些文本生成方法已在 Stack Overflow 上多次介绍过。搜索以了解更多信息。

你说:

在这里,我们注意到输出包含一个“T”字符。

T 的格式由 ISO 8601 标准定义。

【讨论】:

    猜你喜欢
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2011-03-29
    • 2015-01-29
    • 2023-03-16
    相关资源
    最近更新 更多