日期格式化 YYYY日期错位

日期格式化 YYYY日期错位

起因

支付系统通知账务还款结果时,对请求时间使用“YYYYMMddHHmmss”格式化,20171231变为了20181231致使数据不匹配。

我们大多都知道mm与MM的区别,因为分和月会同时出现,但很少会关注其它的pattern大小写有无区分。

重现demo如下

    Date date = new Date(2017 - 1900, 11, 31);

    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    System.out.println(dateFormat.format(date));

    dateFormat = new SimpleDateFormat("YYYY-MM-dd");
    System.out.println(dateFormat.format(date));

输出结果:
2017-12-31
2018-12-31

Date and Time Patterns

LetterDate or Time ComponentPresentationExamples
GEra designatorTextAD
yYearYear1996; 96
YWeek yearYear2009; 09
MMonth in year (context sensitive)MonthJuly; Jul; 07
LMonth in year (standalone form)MonthJuly; Jul; 07
wWeek in yearNumber27
WWeek in monthNumber2
DDay in yearNumber189
dDay in monthNumber10
FDay of week in monthNumber2
EDay name in weekTextTuesday; Tue
uDay number of week (1 = Monday, …, 7 = Sunday)Number1
aAm/pm markerTextPM
HHour in day (0-23)Number0
kHour in day (1-24)Number24
KHour in am/pm (0-11)Number0
hHour in am/pm (1-12)Number12
mMinute in hourNumber30
sSecond in minuteNumber55
SMillisecondNumber978
zTime zoneGeneral time zonePacific Standard Time; PST; GMT-08:00
ZTime zoneRFC 822 time zone-0800
XTime zoneISO 8601 time zone-08; -0800; -08:00

以上y为正常理解中的year,Y为week year,当天所在的周所属年份,一周从周日开始,周六结束。只要本周跨年,那么这周即算入下一年,2017-12-31为周日,刚好是2017最后一周并跨年。用YYYY获取自然得出2018,造成了这个错误。

阅读原文

参考

SimpleDateFormat by Java
Date Formatters by iOS

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
日期格式化中的yyyy-MM-dd,其中yyyy代表四位的年份,MM代表两位的月份,dd代表两位的日期。这种格式化方式可以将指定的日期按照年份-月份-日期的格式进行显示。 需要注意的是,yyyy-MM-dd中的yyyy表示真正的年份,而YYYY-MM-dd表示基于周的年份日期。如果一周处在跨年中,使用YYYY-MM-dd会将该周归入下一年,可能导致显示错误。因此,在日常使用中,建议采用以yyyy开头的格式化方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【MySQL】日期格式化 yyyy-mm-dd 详解 DATE_FORMAT() 函数](https://blog.csdn.net/diandianxiyu/article/details/127632330)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatgptT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [格式化时间字符串yyyy-MM-dd和YYYY-MM-dd的区别,HH:mm:ss和hh:mm:ss的区别,格式化LocalDateTime.now()和...](https://blog.csdn.net/weixin_43944305/article/details/103922671)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatgptT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值