被SimpleDateFormat坑了一次

项目中有一个定时任务,需要判断一个token是否过期,之前的做法是用过期时间减去系统当前时间,若小于某个值就认为需要去更新token了。           

过期时间是存在mysql中的,格式“年-月-日 时:分:秒” 

  SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:MM:SS");

  Date expirationTime = sDateFormat.parse(listStoreConfig.get(i).getExpirationTime());


悲催的结果就是永远都不会更新token。

原因是什么?

计算得到的expirationTime月份不对!

查java API

Class SimpleDateFormat

The following pattern letters are defined (all other characters from 'A' to 'Z' and from 'a' to 'z' are reserved):

Letter Date or Time Component Presentation Examples
G Era designator Text AD
y Year Year 1996; 96
M Month in year Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day in week Text Tuesday; Tue
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800

才知道,分里面的字符不应该是大写的“M”,而应该是小写的“m”


吐血!!

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页