【发布时间】:2020-11-01 17:11:00
【问题描述】:
我有一个文本文件,我正在从中读取和设置事务 POJO 类数据,为了获取开始时间和结束时间之间的差异,我需要解析日期对象中的时间信息。
DateFormat format = new SimpleDateFormat(dateFormat);
System.out.println("Date format in play:"+dateFormat);
Transaction transaction = storageRepositroy.getTransaction(key);
Date start = format.parse(transaction.getStartDate() + " " + transaction.getStartTime());//line no. 29
Date end = format.parse(transaction.getEndDate() + " " + transaction.getEndTime());
运行此代码时出现异常
例外是
Date format in play:yyyy-MM-dd hh:mm a
java.text.ParseException: Unparseable date: "2020–03–01 03:15 PM"
at java.text.DateFormat.parse(DateFormat.java:366)
at dc.tech.transaction.util.TimeUtil.calculateAverageTime(TimeUtil.java:29)
yyyy-MM-dd hh:mm a 是我传递给 SimleDateFormat 构造函数的日期格式。我无法理解和调试为什么会收到此错误。
【问题讨论】:
-
我建议你不要使用
SimpleDateFormat和Date。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的LocalDateTime和DateTimeFormatter。 -
如果您手动键入连字符以测试您的代码是否有效,您的文件中存在连字符问题
-
都是其他字符。 hyphen 应该有 ascii 45 但你的角色给出 ascii 8211. hyphen in 2020–03–01 。仅在此处注意 - 和 -
-
快速而肮脏的方法是使用“yyyy–MM–dd hh:mm a”作为dateFormat,因为您的数据本身具有连字符作为–
-
我没有投反对票(相反)。您的代码示例不完整/不完整,您可以通过providing one that is 改进您的问题。不过,@Ajeetkumar 能够发现问题所在已经足够了。
标签: java date simpledateformat