java – 从今年开始的同一天

我需要在今年的同一天.

示例:现在是2019年,变量包含值2022年7月15日,所以我需要在2019年7月15日到达.它适用于所有日期,除了2月份,它在一年中有额外的一天,今年没有这一天,例如:2020年2月29日将在第二天返回我:2019年3月1日,但在这种情况下我需要返回前一天:2019年2月28日.我如何调整逻辑以使其以这种方式工作?

public static java.util.Date getThisDateInThisYear(java.util.Date date) {
    GregorianCalendar gc = new GregorianCalendar();
    gc.setTime(date);
    Date today = new Date();
    GregorianCalendar gcToday = new GregorianCalendar();
    gcToday.setTime(today);
    gc.set(GregorianCalendar.YEAR,gcToday.get(GregorianCalendar.YEAR));
    return gc.getTime();
  }

解决方法

首先计算年份的差异并将结果添加到日期

public Date getThisDateInThisYear(Date date) {
   Calendar c = Calendar.getInstance();
   int thisYear = c.get(Calendar.YEAR)
   c.setTime(date);

   int diff = thisYear  - c.get(Calendar.YEAR);
   c.add(Calendar.YEAR,diff);

   return c.getTime();

}

我测试了2016-02-29和2020-02-29,两者都返回2019-02-28.

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...