将Tomcat9与MySQL8组合时的时区问题

时间:2018-12-17 06:49:15

标签: mysql jsp tomcat

我在时间列中使用time TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3);,因此在插入新行时会自动设置它。

根据MySQL TIMESTAMP Type Manual

  

MySQL将TIMESTAMP值从当前时区转换为UTC进行存储,然后从UTC返回当前时区进行检索。

在CLI中使用SELECT()函数时,看起来不错:

mysql> SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);
+--------------------------------+
| TIMEDIFF(NOW(), UTC_TIMESTAMP) |
+--------------------------------+
| 08:00:00                       |
+--------------------------------+

1 row in set (0.00 sec)

mysql> select time from databasename.tablename;
+-------------------------+
| time                    |
+-------------------------+
| 2018-12-16 22:02:45.891 |
| 2018-12-16 22:02:46.032 |
| 2018-12-16 22:02:46.169 |
| 2018-12-16 22:02:46.304 |

```data following```

但是,当我尝试在基于Tomcat的JSP页面中显示它时,请使用:

<td align="center">
<c:set var="time" value="${row.time}" />
<fmt:setTimeZone value="GMT+8" />
<fmt:formatDate value="${time}" pattern="yyyy-MM-dd HH:mm:ss.SSS" />
</td>

它显示的奇怪时间比GMT + 8早14小时,而打印当前时间是正常的:

<td align="center" colspan="14">
<h1>
<c:set var="now" value="<%=new java.util.Date()%>" />
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm" />
</h1>
</td>

关于发生了什么的任何想法?

PS: row来自4. Test codeOfficial Tomcat Connect Tutorial的演示代码,如下所示:

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<sql:query var="rs" dataSource="jdbc/TestDB">
select id, foo, bar from testdata
</sql:query>

<html>
  <head>
    <title>DB Test</title>
  </head>
  <body>

  <h2>Results</h2>

<c:forEach var="row" items="${rs.rows}">
    Foo ${row.foo}<br/>
    Bar ${row.bar}<br/>
</c:forEach>

  </body>
</html>

0 个答案:

没有答案