Я использую time TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3);
для столбца времени, поэтому он будет автоматически установлен при вставке новой строки.
В соответствии с MySQL TIMESTAMP Type Manual ,
MySQL преобразует значения TIMESTAMP из текущего часового пояса в UTC для хранения и обратно из UTC в текущее времязона для поиска.
При использовании функции SELECT () в CLI все выглядит нормально:
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```
Однако, когда я пытаюсь отобразить ее на JSP-странице, основанной на Tomcat, используйте:
<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>
отображает странное время, которое на 14 часов раньше, чем GMT + 8, в то время как текущее время печатается нормально:
<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
взято из Официального учебного пособия по Tomcat Connect. демонстрационные коды в 4. Test code
, как показано ниже:
<%@ 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>