在Java的SimpleDateFormat类中格式化日期时,YYYY和yyyy之间存在细微的差异。它们都代表一年,但是yyyy代表日历年,而YYYY代表星期。这是一个细微的差异,仅会导致一年左右的变更问题,因此您的代码本可以一直正常运行,而仅在新的一年中引发问题。
一个例子比用文字更好地说明了这一点。
-
package com.dangoldin.test;
-
-
import java.text.SimpleDateFormat;
-
import java.util.Date;
-
-
public class Test {
-
-
public static void main(String[] args) {
-
try {
-
String[] dates = {"2018-12-01", "2018-12-31", "2019-01-01"};
-
for (String date: dates) {
-
SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
-
Date d = dt.parse(date);
-
-
SimpleDateFormat dtYYYY = new SimpleDateFormat("YYYY");
-
SimpleDateFormat dtyyyy = new SimpleDateFormat("yyyy");
-
-
System.out.println("For date " + date + " the YYYY year is " + dtYYYY.format(d) + " while for yyyy it's " + dtyyyy.format(d));
-
}
-
} catch (Exception e) {
-
System.out.println("Failed with exception: " + e);
-
}
-
}
-
}
这为您提供以下内容:
-
For date 2018-12-01 the YYYY year is 2018 while for yyyy it's 2018
-
For date 2018-12-31 the YYYY year is 2019 while for yyyy it's 2018
-
For date 2019-01-01 the YYYY year is 2019 while for yyyy it's 2019
自两年格式匹配以来,第一个和最后一个有意义。中间一个是奇数之一。日期开始于2018-12-31,但是YYYY给您2019,而yyyy给您2018。通常,您几乎应该始终使用yyyy,因此,添加某种形式的lint或检查以确保您的代码没有引用YYYY的任何日期格式。
-
import java.text.SimpleDateFormat;
-
import java.time.LocalDateTime;
-
import java.time.format.DateTimeFormatter;
-
import java.util.Date;
-
-
public class Example {
-
public static void main(String[] args) {
-
LocalDateTime currentDateTime = LocalDateTime.now();
-
-
DateTimeFormatter format1 = DateTimeFormatter.ofPattern("yyyy");
-
String formatDateTime = currentDateTime.format(format1);
-
System.out.println(formatDateTime);
-
-
DateTimeFormatter format2 = DateTimeFormatter.ofPattern("YYYY");
-
String formatDateTime2 = currentDateTime.format(format2);
-
System.out.println(formatDateTime2);
-
-
Date date = new Date();
-
-
SimpleDateFormat simpleformat1 = new SimpleDateFormat("yyyy");
-
String formatDateTime3 = simpleformat1.format(date);
-
System.out.println(formatDateTime3);
-
-
SimpleDateFormat simpleformat2 = new SimpleDateFormat("YYYY");
-
String formatDateTime4 = simpleformat2.format(date);
-
System.out.println(formatDateTime4);
-
-
}
-
}
12月31日执行结果:
2020
2021
2020
2021
转载:https://blog.csdn.net/allway2/article/details/112058361?utm_medium=distribute.pc_category.none-task-blog-hot-15.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-15.nonecase