java - 如何使用 mysql 日期时间列处理 java 日期

标签 java mysql mybatis

我有一个使用第三方 WebService 的系统。此 WebService 为我提供了很多关于票证的字段。其中三个字段是具有 Unix 时间戳格式的日期(下面我将给出带有值的示例……)。我使用 MyBatis 将这些字段保存在 MySQL 日期时间列中。

我的问题是当我向用户显示时间时,例如:

我从网络服务收到这个值:1435618800,使用this site转换为日期我得到这个值:Mon, 29 Jun 2015 23:00:00 GMT

在我的应用程序中,我从 Web 服务获取以分钟为单位的值 (1435618800),然后使用以下方法转换为日期:

Date date = Date.from( Instant.ofEpochSecond( Long.parseLong(StringValueFromWS)));

我将这个日期设置为一个票证对象,然后我将这个票证对象传递给 MyBatis 以保存到我的表中。当我查看表格内部时,我看到值 2015-06-29 20:00:00。 当我显示此值时,用户看到以下时间:2015-06-29 17:00:00,他们应该看到 2015-06-29 20:00:00.

这是创建表:

CREATE TABLE `ticket` (
  `id_ticket` int(11) NOT NULL AUTO_INCREMENT,
  `open_date` datetime DEFAULT NULL,
  `callback_date` datetime DEFAULT NULL,
  PRIMARY KEY (`id_ticket`)
);

这是我从 mybatis 中插入和选择的 xml:

<select id="getTicket" parameterType="PaginationFilter" resultType="Ticket">
    <![CDATA[
        SELECT
            t.id_ticket as 'id',
            t.open_date as 'openDate',
            t.callback_date as 'callbackDate'

        from ticket as t
        WHERE t.id_ticket = XXX 
    ]]>
</select>

<insert id="insertTicket" parameterType="Ticket" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO ticket 
    (
        `open_date`,
        `callback_date`
    ) 
    VALUES 
    (
        #{openDate}, 
        #{callbackDate}
    );
</insert>

我怀疑对此最优雅的解决方案是什么。我是否应该在插入 MySQL 之前将 GMT 偏移量添加/折扣到日期字段以在我的数据库中包含 GMT 00:00 还是有更好的解决方案?

我通过将我的约会时间增加 3 小时解决了这个问题,但我想知道更好的解决方案,因为我不喜欢这个。

一些附加信息:

  • Java 版本 1.8.0_45
  • Mybatis 3.0.5
  • MySQL 5.5.15
  • 我现在是 GMT -03:00(巴西 - 巴西利亚)
  • 为什么我要使用 Date.from(Instant.ofEpochSecond(timeInSeconds)) here

最佳答案

问题可能是您在将日期对象提供给 MyBaits 类时将其序列化。我不确定 MyBaits 接收和输出什么。

当您序列化它时,我假设序列化程序在日期上使用 toString() 方法,这会导致时间以本地时间显示。在这种情况下,解决方法是通过执行以下操作来设置时区:

Date d = Date.from(Instant.ofEpochSecond(1435618800));
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

您还应该通过执行以下操作找出 mysql 的时区:

mysql> SELECT @@global.time_zone, @@session.time_zone;

关于java - 如何使用 mysql 日期时间列处理 java 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31124529/

相关文章:

java - 带反射的嵌套 Protocol Buffer

Java List 和 Collection 抽象方法不指定主体

php - 多个 INSERT 查询获取每个的last_insert_id

java - 如何将 mybatis 选择查询的巨大结果集导出到 csv?

java - 将空列表发送到存储过程

java - 如何保存旋转后的图像?

java - com.sun.xml.internal.ws.client 不存在

MySQL表更新

php - 使用 phpmyadmin 上传大文件 8GB

java - SpringBoot + Mybatis + MySQL,java.lang.IllegalStateException : Failed to load ApplicationContext