栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用SimpleDateFormat.parse()解析日期时出现NumberFormatException

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用SimpleDateFormat.parse()解析日期时出现NumberFormatException

可能的原因是

SimpleDateFormat
不是线程安全的事实,并且您正在从多个线程中引用它。虽然 极其
困难的证明(约一样难以测试),有一些证据是这种情况:

  1. .11331133EE22
    -注意一切都翻了一番
  2. 880044E.3880044E3
    - 同样在这里

您可能至少有两个线程交织。这

E
让我感到困惑,我认为它正在尝试处理科学计数法(例如1E10等),但这可能是 时区的 一部分。

幸运的是,(格式化)基本修复很简单:

private static final String FORMAT_STRING = "HH:mm:ss.SSSZ";public static Date getCurrentTimeonly() {    SimpleDateFormat formatter = new SimpleDateFormat(FORMAT_STRING);    String onlyTimeStr = formatter.format(new Date());    return formatter.parse(onlyTimeStr);}

您还可以在这里做其他几件事,但要注意以下几点:

1-如果时区为UTC(或任何不带DST的时区),这是微不足道的

public static Date getCurrentTimeonly() {    Date time = new Date();    time.setTime(time.getTime() % (24 * 60 * 60 * 1000));    return time;}

2-您将无法测试此方法,因为您不能安全地暂停时钟(可以更改时区/区域设置)。为了更好地处理Java中的日期/时间,请使用JodaTime之类的东西。请注意,

LocalTime
它没有附加时区,而
Date
仅返回
整数小时
的偏移量(并且存在不在hour上的时区);为了安全起见,您需要返回一个
Calendar
(带有完整时区),或者只返回没有它的东西:

// This method is now more testable.  Note this is only safe for non-DST zonespublic static Calendar getCurrentTimeonly() {    Calendar cal = new Calendar();    // DateTimeUtils is part of JodaTime, and is a class allowing you to pause time!    cal.setTimeInMillis(DateTimeUtils.currentTimeMillis() % (24 * 60 * 60 * 1000));    return cal;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/401978.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号