SimpleDateFormat parse错误:multiple points、For input string: ““.....

1 错误出现

在代码中有需要日期的处理,在方法A中使用了SimpleDateFormat,后期有新的需求,实现新需求的方法B调用了方法A,测试时SimpleDateFormat.parse()出现各种不同的问题,比如multiple points、For input string: “”、empty String等等;

2 问题分析

网上查了一些博客和资料,都是说SimpleDateFormat的并发问题,猜想应该是这个原因;
再跟一下SimpleDateFormat的代码,发现SimpleDateFormat的format()方法和parse()方法都使用日历calendar来操作时间,而calendar是一个共享变量;
SimpleDateFormat继承DateFormat,calendar是DateFormat的共享变量:
SimpleDateFormat继承DateFormat
calendar是DateFormat的共享变量
SimpleDateFormat的format方法如下,多个线程时在calendar.setTime这里会发生不同线程的修改:
在这里插入图片描述
SimpleDateFormat中对DateFormat的抽象方法 parse(String source, ParsePosition pos)的实现:
在这里插入图片描述
establish方法重置日期对象cal的属性值,并返回设置好的对象cal值:
在这里插入图片描述

3 问题处理

java8提供了LocalDate、LocalTime等日期处理API,LocalDate.parse()方法中使用的DateTimeFormatter不存在线程安全问题;

LocalDate.parse("2023-08-08", DateTimeFormatter.ISO_LOCAL_DATE);
LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值