首页 > 编程知识 正文

听说你还在用SimpleDateFormat格式化日期

时间:2023-05-04 17:02:48 阅读:89733 作者:3338

作者:程序员内点事

说在虚幻的路人

最近部门的几个同事因为一些不满相继辞职。 工作三年离别的时候很舍不得,办完所有手续后把他们送离了公司。 几个哥哥在分手的时候对我恶气逼人,我突然有不好的预感。 这件事绝对没这么简单。 我接手了这些大人物的项目,应验了我的预感。 现在我多么有点后悔啊。 为什么不在分手的时候打他们呢! 哈哈~而且这种打人的冲动,在我开始优化几个老哥的项目的时候,越来越强烈了。

有个坑

技术部每月整理代码进行调查和优化。 以前自己审查优化自己的项目,现在几个老哥离职他们的项目落在我头上了。 对程序员来说,最痛苦的事情就是接管别人的项目,进行优化改造。 因为这不比重建项目容易。 但是,军令在先,不能勉强让人头疼吧。

最初的优化要点让我有点崩溃。 这几位大佬技能能力很高,一直是我学习的典范,但是在项目中大多数日期的格式都是这样用SimpleDateFormat,按照下面的代码实现,emm~,受伤的男人什么都可以做。 哈哈~

svcorderdailystatisticspoorderdailystatisticspo=newsvcorderdailystatisticspo (;

简单数据格式=新简单数据格式(yyyy-mm-DD );

datestationtime=date格式. parse (date格式.格式) svcworkorderpo.getpayendtime ();

orderdailystatisticspo.setstatisticaldate (站时间; 另外,项目中时间和日期的API使用也很混乱,考虑到java.util.Date和java.util.Calendar不支持时区,是非线程安全的,日期计算比较繁琐,所以, 但是,许多人在java.util.Date和java.util.Calendar上处理日期。

优化方案

小时格式使用频率非常高,为了简化时间格式,不需要重复制造车轮,将其抽象化,作为全球日期格式处理,结合实践简单介绍以下优化方案。

测试地址: http://127.0.0.133608080/time测试

@获取映射(/时间测试) ) )。

公共订单信息时间测试(

订单信息=新订单信息(;

order.set createtime (本地日期. now );

订单设置日期(新日期) );

返回顺序;

在}

1、@JsonFormat注解
中,使用@JsonFormat注释格式化时间应该是基本操作。 大多数开发人员都应用了这种方式,简单方便。

//*

* * @自动:小福

* * @描述:

*/

公共类订单信息

@JSONformat(locale='zh ',timezone='GMT 8',pattern=' yyyy-mm-ddhh 3360 mm : ss ' ) ) )。

私有本地日期创建时间;

@JSONformat(locale='zh ',timezone='GMT 8',pattern=' yyyy-mm-ddhh 3360 mm : ss ' ) ) )。

专用更新时间;

publiclocaldatetimegetcreatetime {

返回创建时间;

}

公共建筑建立时间(本地数据建立时间) {

this .创建时间=创建时间;

}

公共日期获取更新时间

返回更新时间;

}

公共更新时间(日期更新时间) {

更新时间=更新时间;

}

}测试结果表明,日期类型和本地日期类型都格式化成功。

但还是有个问题,这样做仍然比较繁琐,每个实体类的日期字段都要加@JsonFormat注解,重复的工作量也不小。接着往下看~

2、全局配置 (1)

Springboot 已经为我们提供了日期格式化 ${spring.迷你的老师.date-format:yyyy-MM-dd HH:mm:ss},这里我们需要进行全局配置,配置比较简单,也无需在实体类属性上添加@JsonFormat注解。

/** * @Author: xiaofu * @Description: */ public class OrderInfo { //@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; //@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; public LocalDateTime getCreateTime() { return createTime; } public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } }

只需要用@Configuration定义一个配置类,注入两个Bean即可完成全局日期格式化处理,这种方式也是当前我项目中正在用的方式。

/** * @Author: xiaofu * @Description: */ @Configuration public class LocalDateTimeSerializerConfig { @Value("${spring.迷你的老师.date-format:yyyy-MM-dd HH:mm:ss}") private String pattern; @Bean public LocalDateTimeSerializer localDateTimeDeserializer() { return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern)); } @Bean public yldgk2ObjectMapperBuilderCustomizer 迷你的老师2ObjectMapperBuilderCustomizer() { return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer()); } }

这种方式可支持 Date 类型和 LocalDateTime 类型并存,那么有一个问题就是现在全局时间格式是yyyy-MM-dd HH:mm:ss,但有的字段却需要yyyy-MM-dd格式咋整?

那就需要配合@JsonFormat注解使用,在特定的字段属性添加@JsonFormat注解即可,因为@JsonFormat注解优先级比较高,会以@JsonFormat注解标注的时间格式为主。

3、全局配置 (2)

这种全局配置的实现方式与上边的效果是一样的,不过,要注意的是使用这种配置后,字段手动配置@JsonFormat注解将不再生效。

/** * @Author: xiaofu * @Description: */ public class OrderInfo { //@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; //@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; public LocalDateTime getCreateTime() { return createTime; } public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } }/** * @Author: xiaofu * @Description: */ @Configuration public class LocalDateTimeSerializerConfig { @Value("${spring.迷你的老师.date-format:yyyy-MM-dd HH:mm:ss}") private String pattern; @Bean @Primary public ObjectMapper serializingObjectMapper() { ObjectMapper objectMapper = new ObjectMapper(); JavaTimeModule javaTimeModule = new JavaTimeModule(); javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer()); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer()); objectMapper.registerModule(javaTimeModule); return objectMapper; } public class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { @Override public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeString(value.format(ofPattern(pattern))); } } public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> { @Override public LocalDateTime deserialize(JsonParser p, DeserializationContext deserializationContext) throws IOException { return LocalDateTime.parse(p.getValueAsString(), ofPattern(pattern)); } } }

总结

分享了一个Springboot项目开发过程中的一个小技巧,也顺便吐槽一下项目优化中遇到的坑,优化别的人的代码虽然是一件比较痛苦的事情,但在这个过程中确实能学习到很多技巧,对个人的技能提升也是很有帮助,因为都是些能够实实在在提高开发效率的干货。

来源:掘金 链接:https://juejin.im/post/5e940626e51d4546f5790979

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。