记录问题:mysql中datetime类型字段在后台读取与前端展示

1.数据库字段类型为datetime,model里:
@Column(name = "createtime", length = 20)
private Date createTime;

2.两种将数据传到前端的方法

方法一:

List<Map<String, Object>> list=targetService.findAll();//这里获取到目标list,省略业务方法
List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
for (Map<String, Object> li : list) {
    //String s = li.get("createtime").toString();//覆盖Date对象为字符串
    //li.put("createtime", s);
    newList.add(task);
}
response.setHeader("Content-type", "text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.getWriter().print(JSONArray.fromObject(newList).toString());//数据发往前端

前端用$.post请求获得数据:

$.post("/url",{key1:value1,key2:value2},function(res){
    console.log(res);//这里获取到的日期是createtime:{"date":3,"hours":11,"seconds":4,"month":4,"nanos":0,"timezoneOffset":-480,"year":118,"minutes":6,"time":1525316764000,"day":4}
};

在不是异步获取的情况下使用thymeleaf模板引擎渲染数据:

<td th:text="${#dates.format(listist.createtime, 'yyyy-MM-dd  HH:mm:ss')}">创建时间</td>//正确显示时间为2018-05-03 15:01:10

而通过$.post请求获取的话,由于得到日期的是一个对象(如注释),显示为[object,object],需要重新format为指定的格式2018-05-03 15:01:10。原因是:JSONArray.fromObject会把datetime对象转换为json字符串。

尝试:

将Map<String, Object>中的createtime覆盖为字符串,即方法一注释部分。将Date类型属性转换成字符串,为2018-05-03 15:01:10.0多了“.0”,原因是从数据库查询的datetime时间精确到毫秒。

方法二:

类似方法一,用$.ajax请求得到的却是一个时间戳:1525330869000。。。Why?

3.总结:

只有在异步获取数据库datetime类型数据并渲染到页面的时候会有这种问题,获取到createtime:{"date":3,"hours":11,"seconds":4,"month":4,"nanos":0,"timezoneOffset":-480,"year":118,"minutes":6,"time":1525316764000,"day":4}或者时间戳,可以在前端js处理成要展示的格式,也可以像上面写的直接后台覆盖该对象在map中的键值对。

以上是初次遇到该问题,后续再遇到补充。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL,时间类型有四种,分别是DATETIME、DATE、TIME、TIMESTAMP,这些类型在Java的转换方式如下: 1. DATETIME类型 在Java,可以使用java.time.LocalDateTime类来表示DATETIME类型。在通过JDBC从MySQL读取DATETIME类型的值时,可以使用ResultSet类的getTimestamp方法获取java.sql.Timestamp类型的值,然后再将其转换为java.time.LocalDateTime类型: ```java ResultSet rs = stmt.executeQuery("SELECT datetime_column FROM table"); while (rs.next()) { Timestamp timestamp = rs.getTimestamp("datetime_column"); LocalDateTime datetime = timestamp.toLocalDateTime(); // ... } ``` 在将java.time.LocalDateTime类型的值写入到MySQLDATETIME类型字段时,可以使用PreparedStatement类的setTimestamp方法: ```java PreparedStatement pstmt = conn.prepareStatement("INSERT INTO table (datetime_column) VALUES (?)"); LocalDateTime datetime = LocalDateTime.now(); Timestamp timestamp = Timestamp.valueOf(datetime); pstmt.setTimestamp(1, timestamp); pstmt.executeUpdate(); ``` 2. DATE类型 在Java,可以使用java.time.LocalDate类来表示DATE类型。在通过JDBC从MySQL读取DATE类型的值时,可以使用ResultSet类的getDate方法获取java.sql.Date类型的值,然后再将其转换为java.time.LocalDate类型: ```java ResultSet rs = stmt.executeQuery("SELECT date_column FROM table"); while (rs.next()) { Date date = rs.getDate("date_column"); LocalDate localDate = date.toLocalDate(); // ... } ``` 在将java.time.LocalDate类型的值写入到MySQL的DATE类型字段时,可以使用PreparedStatement类的setDate方法: ```java PreparedStatement pstmt = conn.prepareStatement("INSERT INTO table (date_column) VALUES (?)"); LocalDate localDate = LocalDate.now(); Date date = Date.valueOf(localDate); pstmt.setDate(1, date); pstmt.executeUpdate(); ``` 3. TIME类型 在Java,可以使用java.time.LocalTime类来表示TIME类型。在通过JDBC从MySQL读取TIME类型的值时,可以使用ResultSet类的getTime方法获取java.sql.Time类型的值,然后再将其转换为java.time.LocalTime类型: ```java ResultSet rs = stmt.executeQuery("SELECT time_column FROM table"); while (rs.next()) { Time time = rs.getTime("time_column"); LocalTime localTime = time.toLocalTime(); // ... } ``` 在将java.time.LocalTime类型的值写入到MySQL的TIME类型字段时,可以使用PreparedStatement类的setTime方法: ```java PreparedStatement pstmt = conn.prepareStatement("INSERT INTO table (time_column) VALUES (?)"); LocalTime localTime = LocalTime.now(); Time time = Time.valueOf(localTime); pstmt.setTime(1, time); pstmt.executeUpdate(); ``` 4. TIMESTAMP类型 在Java,可以使用java.time.LocalDateTime类来表示TIMESTAMP类型。在通过JDBC从MySQL读取TIMESTAMP类型的值时,可以使用ResultSet类的getTimestamp方法获取java.sql.Timestamp类型的值,然后再将其转换为java.time.LocalDateTime类型: ```java ResultSet rs = stmt.executeQuery("SELECT timestamp_column FROM table"); while (rs.next()) { Timestamp timestamp = rs.getTimestamp("timestamp_column"); LocalDateTime datetime = timestamp.toLocalDateTime(); // ... } ``` 在将java.time.LocalDateTime类型的值写入到MySQL的TIMESTAMP类型字段时,可以使用PreparedStatement类的setTimestamp方法: ```java PreparedStatement pstmt = conn.prepareStatement("INSERT INTO table (timestamp_column) VALUES (?)"); LocalDateTime datetime = LocalDateTime.now(); Timestamp timestamp = Timestamp.valueOf(datetime); pstmt.setTimestamp(1, timestamp); pstmt.executeUpdate(); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值