首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mysql datetime列处理java日期

问如何使用mysql datetime列处理java日期
EN

Stack Overflow用户
提问于 2015-06-29 20:00:34
回答 1查看 2.5K关注 0票数 1

我有一个消耗第三方WebService的系统.这个WebService给了我很多关于一张票的字段。这些字段中有三个是Unix时间戳格式的日期(下面我将给出一些值..)。我使用MySQL将这些字段保存在MyBatis日期时列中。

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

我从webservice:1435618800接收到这个值,使用本站进行转换,到目前为止我得到了这个值:Mon, 29 Jun 2015 23:00:00 GMT。

在我的应用程序中,我从web服务获得值以分钟为单位(1435618800),并使用以下方法将其转换为日期:

代码语言:javascript
复制
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表:

代码语言:javascript
复制
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`)
);

下面是我的insert中的xml,以及从myb提斯中选择的xml:

代码语言:javascript
复制
<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偏移量添加/折扣到date字段,以使GMT 00:00在我的数据库中,还是有更好的解决方案?

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

一些补充资料:

  • Java版本1.8.0_45
  • 迈巴提斯3.0.5
  • MySQL 5.5.15
  • 我在格林尼治时间03:00(巴西-巴西利亚)
  • 为什么我要使用Date.from(Instant.ofEpochSecond(timeInSeconds)) 这里
EN

回答 1

Stack Overflow用户

发布于 2015-06-29 20:49:51

问题可能是,当将日期对象授予您的MyBaits类时,您正在序列化它。我不知道MyBaits接收和输出了什么。

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

代码语言:javascript
复制
Date d = Date.from(Instant.ofEpochSecond(1435618800));
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

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

代码语言:javascript
复制
mysql> SELECT @@global.time_zone, @@session.time_zone;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31124529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档