我在时间列中使用time TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3);
,因此在插入新行时会自动设置它。
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 code
中Official 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>