本地日期时间转换

问题描述 投票:0回答:1

我正在尝试借助 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 类进行转换。

java date simpledateformat java-time datetimeformatter
1个回答
0
投票
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 是什么。

© www.soinside.com 2019 - 2024. All rights reserved.