Java的SimpleDateFormat,DateTimeFormatter:YYYY与yyyy

在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
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值