我正在尝试借助 LocalDateTime java 类转换当前日期和时间,然后尝试将其存储在具有日期数据类型的数据库表列中。
下面是代码,我正在尝试执行
SewaApiReqResEntity sewaApiHealthReqRes = null;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");
String currentDateString = LocalDateTime.now().format(formatter);
LocalDateTime sentTime = LocalDateTime.parse(currentDateString, formatter);
sewaApiHealthReqRes.setSentTime(sentTime);
System.out.println(sewaApiHealthReqRes.getSentTime());
下面是我的实体类 - 我只显示了所需的列:
public class SewaApiReqResEntity {
@Column(name = "sent_time")
private LocalDateTime sentTime;
}
通过上面的代码,我得到了这种格式:
2024-04-29T18:24:41
我们必须以以下格式存储值
03/28/2024 17:42:40
我尝试将实体类的数据类型从 LocalDateTime 更改为日期,并且在服务类中我使用 Date 类进行转换。
String currentDateString = LocalDateTime.now().format(formatter); LocalDateTime sentTime = LocalDateTime.parse(currentDateString, formatter);
完全没用。让我大吃一惊的是,这个简单的心智模型错误每隔 15 个“java”标记问题就会出现一次。
LocalDateTime 没有任何格式。
他们根本就没有有。它们存储年、月、日、小时、分钟和秒。时期。他们不会将其存储为“字符串”。就是这样,仅此而已:
class LocalDateTime {
int year, month, day, hour, minute, second;
}
这就是为什么你不能仅使用LDT对象“打印”LDT对象。相反,您要求
DateTimeFormatter
对象通过传递 LDT 来打印 LDT。是的,LDT 有一个 toString()
方法。 与所有 toString()
方法一样,它们仅用于调试,切勿用于生成显示给最终用户或发送到其他代码的字符串。您无法更改它打印的内容。
因此,您编写的代码片段只是一种低效且缓慢的方法来完成此等效操作:
LocalDateTime sentTime = LocalDateTime.now();
格式化然后取消格式化只是将其转换为某种状态然后再返回,没有任何目的。
System.out.println(sewaApiHealthReqRes.getSentTime());
这称为
toString()
。您无法修改 toString 打印的内容。如果以某种方式相关的话,无论你拥有什么使用 LDT 的 toString 输出的代码都是损坏,你必须修复它那里,你不能在这里修复它。
我们必须以以下格式存储值
LDT 不存储任何格式的任何内容。不可能以某种特定格式存储它。 “它必须采用这种格式”是您对以字符串形式存储数据的 API 或存储机制所说的一句话。 LocalDateTime 不会这样做,因此,该句子不可能适用于它们。无论
SewaApiRequestEntity
是什么,要么是 [A] 是一个你无法使用或必须首先修复的错误混乱,要么 [B] 在将 LDT 发送到“sewa”时会负责将其设置为适当的格式,无论它是什么。换句话说,不用担心这个,一切正常。或者,如果不是,您无法在这里修复它,您必须修复 SewaApiRequestEntity 是什么。