Yyyy vs yyyy-Java日期格式化程序伤害我大脑的那一天

2020-09-10 02:59:30

编程中的约会是很难的。ISO-8601日期标准使它们更容易,但完全诚实地说,我没有通过ISO-8601认证,所以我不太擅长我的工作。不过,我所知道的是YYYY和YYYY在格式化日期时的非常重要的区别。

这种差异将使您的代码工作得非常好,除了在某些年份的最后几年处理日期时。

这里有一个例子,去年我非常荣幸地与之打交道。对于2019年12月31日(2019年12月31日),YYYY将输出2019年,但YYYY将输出2020年。原因是从技术上讲,12月31日所在的那一周是2020年的第一周。注意和调试此问题可能会很麻烦。在我的例子中,2019年12月31日是从前端发送的,正确地存储在DB中,但在返回时变成了2020年12月31日,没有人知道为什么。我们默认的JSON日期格式化程序是罪魁祸首,它使用了YYYY,而它本应该使用YYYY(当然是我自己笨拙地复制和粘贴了一些快速解决方案)。

//包含来自Database的值(2019年12月31日)LocalDateTime dateTime;//字符串值为2019-12-31 string yyyy=dateTime。Format(Format Yyyy);//字符串值为2020-12-31 string YYYY=dateTime。Format(Format YYYY);

//实际日期值为2020-12-31 LocalDateTime parsedDateyyy=LocalDateTime。Parse(";2020-12-31";,format yyyy);//实际日期取值为2019-12-31 LocalDateTime parsedDateYYYY=LocalDateTime。Parse(";2020-12-31";,format YYYY);