joda-time踩坑记

一,问题描述

  通过DateTime获取某年某月某日的时间戳,然后使用joda-time的Period.getYears()比较两个时间相差的年数。当new DateTime("1990-04-15")报错如下:

Exception in thread "main" org.joda.time.IllegalInstantException: Cannot parse "1990-04-15": Illegal instant due to time zone offset transition (Asia/Shanghai)
	at org.joda.time.format.DateTimeParserBucket.computeMillis(DateTimeParserBucket.java:471)
	at org.joda.time.format.DateTimeParserBucket.doParseMillis(DateTimeParserBucket.java:182)
	at org.joda.time.format.DateTimeFormatter.parseMillis(DateTimeFormatter.java:826)
	at org.joda.time.convert.StringConverter.getInstantMillis(StringConverter.java:65)
	at org.joda.time.base.BaseDateTime.<init>(BaseDateTime.java:173)
	at org.joda.time.DateTime.<init>(DateTime.java:257)
	at utils.Encrypt.main(Encrypt.java:184)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
通过遍历1900-2500年所有时间发现并不是所有时间都会报错,只有1940-06-03、1941-03-16、1986-05-04、1987-04-12、1988-04-10、1989-04-16、1990-04-15、1991-04-14几个时间会有如上错误抛出。

二,原因

  new DateTime("1990-04-15")时未指定时区,导致无法找到该时间对应的时间戳。

三,解决方案

  new DateTime("1990-04-15")时指定时区,如:new DateTime("1990-04-15", DateTimeZone.forID("+08:00"))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值