学艺不精,被Java日期格式化YYYY给坑了一手

自学代码多年,前些年都是写的C#,那时候,都是很规范的按照书里面说的,日期格式化用yyyy-MM-dd。去年开始,直接上手做Java的项目,也没有很系统的去学这个东西,也就是能用热门组件做项目而已。就在昨天,12月26号,线上一个简单的EBS查询接口获取不到数据了,很奇怪,因为近2周没有发过新版本了,所以,初步定位是数据问题,但是EBS也没有做过任何调整,然后便去查看了一下接口调用日志,这货传的日期怎么是2022-12-26呢?

此时,我去看了下代码,发现日期格式化的pattern写的是YYYY-MM-dd'T'HH:mm:ssZZ,其实这是从之前一位离职的同事写的代码里复制,当时没想那么多,就想着偷懒,没想到就给自己买下一个坑。之前在C#中,我并未用过YYYY,难不成,这YYYY有什么问题吗?然后边去百度了一下,才得知,yyyyYYYY是有区别的,y是直接取年份,Y是取当前周所在年份(如果该周跨年,那么则取跨年的年份),一周是按周日到周六,12月26号刚好周日,到周六(2022-01-01)刚好跨年为2022年。传参时的日期变为2022-12-26,导致查不到数据。

为此,我去瞅了一眼DateFormatSymbols这个类,里面的patternChars代码如下,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
static final String  patternChars = "GyMdkHmsSEDFwWahKzZYuXL";

static final int PATTERN_ERA = 0; // G
static final int PATTERN_YEAR = 1; // y 实际年份,例:
static final int PATTERN_MONTH = 2; // M 实际月份
static final int PATTERN_DAY_OF_MONTH = 3; // d 月中的第几天
static final int PATTERN_HOUR_OF_DAY1 = 4; // k 小时(24小时制),从1开始,即1-24点
static final int PATTERN_HOUR_OF_DAY0 = 5; // H 小时(24小时制),从0开始,即0-23点
static final int PATTERN_MINUTE = 6; // m 分钟
static final int PATTERN_SECOND = 7; // s 秒
static final int PATTERN_MILLISECOND = 8; // S 毫秒
static final int PATTERN_DAY_OF_WEEK = 9; // E 所传日期里的这周的第几天 星期天为1,星期六为7
static final int PATTERN_DAY_OF_YEAR = 10; // D 所传日期里年中的第几天
static final int PATTERN_DAY_OF_WEEK_IN_MONTH = 11; // F
static final int PATTERN_WEEK_OF_YEAR = 12; // w
static final int PATTERN_WEEK_OF_MONTH = 13; // W
static final int PATTERN_AM_PM = 14; // a
static final int PATTERN_HOUR1 = 15; // h 小时(12小时制),从1开始,即1-12点
static final int PATTERN_HOUR0 = 16; // K 小时(12小时制),从0开始,即0-11点
static final int PATTERN_ZONE_NAME = 17; // z
static final int PATTERN_ZONE_VALUE = 18; // Z
static final int PATTERN_WEEK_YEAR = 19; // Y 周所在的年份,如果日期所在的周存在跨年,那边是跨年的年份。周是指周日-周六。
static final int PATTERN_ISO_DAY_OF_WEEK = 20; // u
static final int PATTERN_ISO_ZONE = 21; // X
static final int PATTERN_MONTH_STANDALONE = 22; // L

没想到java里面的日期格式弯弯道道还挺多的,大小写的作用都不一样,这还真得注意。另外,在使用API的时候,一定要搞清楚其用法及含义,瞎用的话,很容给自己买下定时炸弹。

学艺不精,被Java日期格式化YYYY给坑了一手

https://blogs.52fx.biz/posts/481354044.html

作者

eyiadmin

发布于

2021-12-27

更新于

2024-05-31

许可协议

评论