首页 > 解决方案 > Java:无需时间转换即可保存日期时间

问题描述

我正在使用spring boot和mysql。

首先,我的一个时间字段使用 Date 类型,@JsonFormat(shape=JsonFormat.Shape.STRING, pattern=Constant.DATE_TIME_FORMAT, timezone = "....")由于时区不同,我必须使用它来处理时间转换。然后我将其从 更改DateLocalDateTime以确保没有时间转换并timezone从上面的注释中删除该属性。

但我错了,在 UAT 环境中,保存在 UI(swagger) 中的输入数据在数据库中将 '12:00:00' 更改为 '04:30:00'。

然后我尝试通过调整我机器中的时区以及 mysql 服务器中的当前时区来进行测试。这是几次尝试后的结果:

Back-end Timezone, Database Timezone | Result 
  1. BE:+8:00,DB:+5:00 | 12 小时 -> 9 小时
  2. BE:+0:00,DB:+5:00 | 12 小时 -> 17 小时
  3. BE:+8:00,DB:+0:00 | 12 小时 -> 4 小时

表列的数据类型是time因为我只想保存和显示时间,所以哪个日期都没有关系,所以我将1970-01-01其用作默认日期。

问题是由于 BE 和 DB 的时区不同,我不想进行任何时间转换,我希望数据库中保存的数据与 UI 上的输入时间完全相同(UI:12h -> DB:12h)。

这是我在实体中的字段:

@ApiModelProperty(example = "1970-01-01 12:00:00")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern=Constant.DATE_TIME_FORMAT)
private LocalDateTime monStartTime;

问题:尽管BE和DB之间的时区不同,有什么方法可以避免时间转换?

标签: mysqlspring-boottimedata-conversion

解决方案


您可以在后端将字符串作为数据类型。

private Sting monStartTime;

无需更改数据库。数据库列应该是你已经拥有的时间。

尝试这个。它不会转换您的时区。


推荐阅读