LocalDatetime 与 mybatis、json的坑

总所周知,localdatetime是jdk8 推出的关于日期计算非常方便地一个类,一旦开始用上就欲罢不能。但是在使用的时候,坑还是蛮多的。

一、mybatis与LocalDatetime

如果直接将实体里面所有的Date类型换成LocalDatetime之后,运行程序是会报异常的。此时,可以加入以下依赖:

  1. <dependency>
  2. <groupId>org.mybatis</groupId>
  3. <artifactId>mybatis-typehandlers-jsr310</artifactId>
  4. <version>1.0.2</version>
  5. </dependency>

在mybatis3,.4以上,加入该依赖即可生效。mapper等跟之前一样无需修改。

二、LocalDatetime与json

此处localdatetime转json用的是jackson,其他转json的工具未测

待转类:

  1. public class MyTest {
  2.  
  3. private LocalDateTime now;
  4.  
  5. public LocalDateTime getNow() {
  6. return now;
  7. }
  8.  
  9. public void setNow(LocalDateTime now) {
  10. this.now = now;
  11. }
  12. }


将该类实例直接转成json之后输出

 

  1. {
  2. "now" : {
  3. "dayOfMonth" : 29,
  4. "dayOfWeek" : "FRIDAY",
  5. "dayOfYear" : 363,
  6. "hour" : 23,
  7. "minute" : 45,
  8. "month" : "DECEMBER",
  9. "monthValue" : 12,
  10. "nano" : 128000000,
  11. "second" : 10,
  12. "year" : 2017,
  13. "chronology" : {
  14. "id" : "ISO",
  15. "calendarType" : "iso8601"
  16. }
  17. }
  18. }


这样一个时间显得有点琐碎。我们一般跟前端交互的时候,用的都是形如 yyyyMMdd HH:mm:ss 这样的格式。所以此时就需要转下格式

  1. {
  2. "now" : "2017-12-29 23:50:32"
  3. }

这是时候,就需要使用到注解

作为接受参数时,使用

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

作为格式化输出时,需要使用

@JsonSerialize(using = LocalDateTimeSerializer.class)

三 奇怪的时间

有时候,使用json序列化之后的时间,会发现比传参的时间差距有几个小时.一开始感觉很奇怪,后来发现json序列化的时候指定时区为GMT+8之后,就不会出现该现象.

转载于:https://www.cnblogs.com/zjm-1/p/9587872.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值