Java之时间处理(当前年的上一年、上一季度、当月、当季)

一、当前年的上一年

核心代码:

public static String getYearBefore() {
      SimpleDateFormat formats = new SimpleDateFormat("yyyy");
      Calendar c = Calendar.getInstance();
      c.add(Calendar.YEAR, -1);
      Date date = c.getTime();
      return formats.format(date);
 }

二、上一季度

核心代码:

复制代码
/**
 * 获取上一季度 开始和结束时间
 *
 * @return
 */
public static DateRange getLastQuarter() {
    Calendar startCalendar = Calendar.getInstance();
    startCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3 - 1) * 3);
    startCalendar.set(Calendar.DAY_OF_MONTH, 1);
    setMinTime(startCalendar);

    Calendar endCalendar = Calendar.getInstance();
    endCalendar.set(Calendar.MONTH, ((int) endCalendar.get(Calendar.MONTH) / 3 - 1) * 3 + 2);
    endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
    setMaxTime(endCalendar);

    return new DateRange(startCalendar.getTime(), endCalendar.getTime());
}


/**
 * 最小时间
 *
 * @param calendar
 */
private static void setMinTime(Calendar calendar) {
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
}

/**
 * 最大时间
 *
 * @param calendar
 */
private static void setMaxTime(Calendar calendar) {
    calendar.set(Calendar.HOUR_OF_DAY, calendar.getActualMaximum(Calendar.HOUR_OF_DAY));
    calendar.set(Calendar.MINUTE, calendar.getActualMaximum(Calendar.MINUTE));
    calendar.set(Calendar.SECOND, calendar.getActualMaximum(Calendar.SECOND));
    calendar.set(Calendar.MILLISECOND, calendar.getActualMaximum(Calendar.MILLISECOND));
}
复制代码

DateRange.java:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class DateRange {
    private Date start;
    private Date end;
}

三、当月

核心代码:

复制代码
/**
   * 获取当月(开始时间)
   *
   * @return
   */
  public static String getCurrentMonthStartDate() {

      // 获取当前年份、月份、日期
      Calendar cale = null;
      // 获取当月第一天
      SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
      String firstday;
      cale = Calendar.getInstance();
      cale.add(Calendar.MONTH, 0);
      cale.set(Calendar.DAY_OF_MONTH, 1);
      firstday = format.format(cale.getTime());
      return firstday;
  }


  /**
   * 获取当月(结束时间)
   *
   * @return
   */
  public static String getCurrentMonthEndDate() {

      // 获取当前年份、月份、日期
      Calendar cale = null;
      // 获取当月最后一天
      SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
      String lastday;
      cale = Calendar.getInstance();
      cale.add(Calendar.MONTH, 1);
      cale.set(Calendar.DAY_OF_MONTH, 0);
      lastday = format.format(cale.getTime());
      return lastday;
  }
复制代码

四、当季

核心代码:

复制代码
/**
    * 获取当季
    *
    * @return
    */
   public static DateRange getThisQuarter() {
       Calendar startCalendar = Calendar.getInstance();
       startCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3) * 3);
       startCalendar.set(Calendar.DAY_OF_MONTH, 1);
       setMinTime(startCalendar);

       Calendar endCalendar = Calendar.getInstance();
       endCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3) * 3 + 2);
       endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
       setMaxTime(endCalendar);

       return new DateRange(startCalendar.getTime(), endCalendar.getTime());
   }
复制代码

 

posted @   挑战者V  阅读(2130)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2018-04-05 MyBatis之反射技术+JDK动态代理+cglib代理
2018-04-05 MyBatis之动态sql
点击右上角即可分享
微信分享提示