项目中有一个定时任务,需要判断一个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”
吐血!!