Hutool实现按周、月、季度、半年、一年、今年以来统计

先看效果 

##########   testHutuUtilmethods start  #######
quarter-->3
2022-09-19 19:12:58--yearAndQuarter-->20223
2022-09-19 19:12:58--endOfQuarter-->2022-09-30 23:59:59
2022-09-19 19:12:58--beginOfQuarter-->2022-07-01 00:00:00
2022-09-19 19:12:58--endOfWeek-->2022-09-25 23:59:59
2022-09-19 19:12:58--endOfYear-->2022-12-31 23:59:59
2022-09-19 19:12:58--month-->SEPTEMBER
2022-09-19 19:12:58--dayOfWeek-->2
2022-09-19 19:12:58--weekOfYear-->39
2022-09-19 19:12:58--beginOfWeek-->2022-09-19 00:00:00
2022-09-19 19:12:58--weekOfYear-->39
2022-09-19 19:12:58--nextWeek-->2022-09-26 19:12:58
2022-09-19 19:12:58--lastWeek-->2022-09-12 19:12:58
2022-09-19 19:12:58--betweenWeek-true-->52
2022-09-19 19:12:58--betweenWeek-false->52
2022-09-19 19:12:58--thisMonth->8
2022-09-19 19:12:58--halfYear->2022-06-30 23:59:59
##########   testHutuUtilmethods end #######



******************   周--getRecentWeeksTimeStamp    *************************
往前第1周:TimeObj(1663516799,1,2022-09-12,2022-09-18,2022-09-18)
往前第2周:TimeObj(1662911999,1,2022-09-05,2022-09-11,2022-09-11)
往前第3周:TimeObj(1662307199,1,2022-08-29,2022-09-04,2022-09-04)
往前第4周:TimeObj(1661702399,1,2022-08-22,2022-08-28,2022-08-28)
往前第5周:TimeObj(1661097599,1,2022-08-15,2022-08-21,2022-08-21)
往前第6周:TimeObj(1660492799,1,2022-08-08,2022-08-14,2022-08-14)
往前第7周:TimeObj(1659887999,1,2022-08-01,2022-08-07,2022-08-07)
往前第8周:TimeObj(1659283199,1,2022-07-25,2022-07-31,2022-07-31)
******************   月--getRecentMonthsTimeStamp    *************************
往前第1月:TimeObj(1661961599,2,2022-08-01,2022-08-31,2022-08-31)
往前第2月:TimeObj(1659283199,2,2022-07-01,2022-07-31,2022-07-31)
往前第3月:TimeObj(1656604799,2,2022-06-01,2022-06-30,2022-06-30)
往前第4月:TimeObj(1654012799,2,2022-05-01,2022-05-31,2022-05-31)
往前第5月:TimeObj(1651334399,2,2022-04-01,2022-04-30,2022-04-30)
往前第6月:TimeObj(1648742399,2,2022-03-01,2022-03-31,2022-03-31)
往前第7月:TimeObj(1646063999,2,2022-02-01,2022-02-28,2022-02-28)
往前第8月:TimeObj(1643644799,2,2022-01-01,2022-01-31,2022-01-31)
往前第9月:TimeObj(1640966399,2,2021-12-01,2021-12-31,2021-12-31)
往前第10月:TimeObj(1638287999,2,2021-11-01,2021-11-30,2021-11-30)
往前第11月:TimeObj(1635695999,2,2021-10-01,2021-10-31,2021-10-31)
******************   季度--getRecentQuartersTimeStamp    *************************
往前第1个季度:TimeObj(1656604799,3,2022-04-01,2022-06-30,2022-06-30)
往前第2个季度:TimeObj(1648742399,3,2022-01-01,2022-03-31,2022-03-31)
往前第3个季度:TimeObj(1640966399,3,2021-10-01,2021-12-31,2021-12-31)
往前第4个季度:TimeObj(1633017599,3,2021-07-01,2021-09-30,2021-09-30)
******************   半年--getRecentHalfYearsTimeStamp    *************************
往前第1个半年:TimeObj(1672502399,4,2022-07-01,2022-12-31,2022-12-31)
往前第2个半年:TimeObj(1656604799,4,2022-01-01,2022-06-30,2022-06-30)
往前第3个半年:TimeObj(1640879999,4,2021-07-01,2021-12-30,2021-12-30)
往前第4个半年:TimeObj(1625068799,4,2021-01-01,2021-06-30,2021-06-30)
******************   年--getRecentYearsTimeStamp    *************************
往前第1年:TimeObj(1672502399,5,2022-01-01,2022-12-31,2022-12-31)
往前第2年:TimeObj(1640966399,5,2021-01-01,2021-12-31,2021-12-31)
往前第3年:TimeObj(1609430399,5,2020-01-01,2020-12-31,2020-12-31)
******************   今年以来--getBeginYearToLastMonthTimeStamp    *************************
往前今年以来第1月:TimeObj(1661961599,6,2022-01-01,2022-08-31,2022-08-31)
往前今年以来第2月:TimeObj(1659283199,6,2022-01-01,2022-07-31,2022-07-31)
往前今年以来第3月:TimeObj(1656604799,6,2022-01-01,2022-06-30,2022-06-30)
往前今年以来第4月:TimeObj(1654012799,6,2022-01-01,2022-05-31,2022-05-31)
往前今年以来第5月:TimeObj(1651334399,6,2022-01-01,2022-04-30,2022-04-30)
往前今年以来第6月:TimeObj(1648742399,6,2022-01-01,2022-03-31,2022-03-31)
往前今年以来第7月:TimeObj(1646063999,6,2022-01-01,2022-02-28,2022-02-28)
往前今年以来第8月:TimeObj(1643644799,6,2022-01-01,2022-01-31,2022-01-31)

引入依赖

<dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.6</version>
        </dependency>

代码

import cn.hutool.core.date.{DatePattern, DateTime, DateUtil}

object HutoolUtil {

  def main(args: Array[String]): Unit = {
    testHutuUtilmethods(DateUtil.date())
    testTimeParam(DateUtil.date())
  }


  def testTimeParam(dateTime: DateTime): Unit = {
    //    getWeekTimeStampOfThisYear(dateTime)
    getRecentWeeksTimeStamp(dateTime, 9)
    getRecentMonthsTimeStamp(dateTime, 12)
    getRecentQuartersTimeStamp(dateTime, 5)
    getRecentHalfYearsTimeStamp(dateTime, 5)
    getRecentYearsTimeStamp(dateTime, 3)
    getBeginYearToLastMonthTimeStamp(dateTime, DateUtil.thisMonth() + 1)
  }

  def testHutuUtilmethods(dateTime: DateTime) = {
    println("##########   testHutuUtilmethods start  #######")
    println("quarter-->" + DateUtil.quarter(dateTime))
    println(dateTime + "--yearAndQuarter-->" + DateUtil.yearAndQuarter(dateTime))
    println(dateTime + "--endOfQuarter-->" + DateUtil.endOfQuarter(dateTime))
    println(dateTime + "--beginOfQuarter-->" + DateUtil.beginOfQuarter(dateTime))
    println(dateTime + "--endOfWeek-->" + DateUtil.endOfWeek(dateTime, true))
    println(dateTime + "--endOfYear-->" + DateUtil.endOfYear(dateTime))
    println(dateTime + "--month-->" + DateUtil.monthEnum(dateTime))
    println(dateTime + "--dayOfWeek-->" + DateUtil.dayOfWeek(dateTime))
    println(dateTime + "--weekOfYear-->" + DateUtil.weekOfYear(dateTime))
    println(dateTime + "--beginOfWeek-->" + DateUtil.beginOfWeek(dateTime, true))
    println(dateTime + "--weekOfYear-->" + DateUtil.weekOfYear(dateTime))
    println(dateTime + "--nextWeek-->" + DateUtil.offsetWeek(dateTime, 1))
    println(dateTime + "--lastWeek-->" + DateUtil.offsetWeek(dateTime, -1))
    println(dateTime + "--betweenWeek-true-->" + DateUtil.betweenWeek(DateUtil.beginOfYear(dateTime), DateUtil.endOfYear(dateTime), true))
    println(dateTime + "--betweenWeek-false->" + DateUtil.betweenWeek(DateUtil.beginOfYear(dateTime), DateUtil.endOfYear(dateTime), false))
    println(dateTime + "--thisMonth->" + DateUtil.thisMonth())
    println(dateTime + "--halfYear->" + DateUtil.offsetMonth(DateUtil.endOfYear(dateTime), -6))
    println("##########   testHutuUtilmethods end #######\n\n\n")
  }

  def getWeekTimeStampOfThisYear(dateTime: DateTime) = {
    println("******************   getWeekTimeStampOfYear    *************************")
    val weekCount = DateUtil.betweenWeek(DateUtil.beginOfYear(dateTime), DateUtil.endOfYear(dateTime), true)
    val weekRange = Range.Long(1, weekCount, 1)
    weekRange.map(weekNum => {
      val weekTime = DateUtil.offsetWeek(dateTime, weekNum.toInt)
      val endOfWeek = weekTime.getTime
      println("第" + weekNum + "周,结束时间:" + DateUtil.format(weekTime, DatePattern.PURE_DATETIME_PATTERN) + ",时间戳:" + endOfWeek)
      val start = DateUtil.beginOfWeek(weekTime)
      val end = DateUtil.endOfWeek(weekTime, true)
      val endTime = end.getTime
      endTime
      val timeObj = TimeObj(endTime / 1000, 1, DateUtil.format(start, DatePattern.NORM_DATE_PATTERN), DateUtil.format(end, DatePattern.NORM_DATE_PATTERN), DateUtil.format(DateUtil.date(endOfWeek * 1000), DatePattern.NORM_DATE_PATTERN))
      println(timeObj)
      timeObj
    })

  }

  def getRecentWeeksTimeStamp(dateTime: DateTime, totalWeeksBefore: Int) = {
    println("******************   周--getRecentWeeksTimeStamp    *************************")
    val weekRange = Range.Long(1, totalWeeksBefore, 1)
    weekRange.map(weekNum => {
      val weekTime = DateUtil.offsetWeek(dateTime, -weekNum.toInt)
      val end = DateUtil.endOfWeek(weekTime, true)
      val start = DateUtil.beginOfWeek(weekTime)
      //按时间戳的秒单位做时间戳的值
      val endTime = end.getTime / 1000
      val timeObj = TimeObj(endTime, 1, DateUtil.format(start, DatePattern.NORM_DATE_PATTERN), DateUtil.format(end, DatePattern.NORM_DATE_PATTERN), DateUtil.format(DateUtil.date(endTime * 1000), DatePattern.NORM_DATE_PATTERN))
      println("往前第" + weekNum + "周:" + timeObj)
      timeObj
    })
  }

  def getRecentMonthsTimeStamp(dateTime: DateTime, totalMonthsBefore: Int) = {
    println("******************   月--getRecentMonthsTimeStamp    *************************")
    val weekRange = Range.Long(1, totalMonthsBefore, 1)
    weekRange.map(monthNum => {
      val monthTime = DateUtil.offsetMonth(dateTime, -monthNum.toInt)
      //按时间戳的秒单位做时间戳的值
      val endOfMonth = monthTime.getTime / 1000
      val start = DateUtil.beginOfMonth(monthTime)
      val end = DateUtil.endOfMonth(monthTime)
      //按时间戳的秒单位做时间戳的值
      val endTime = end.getTime / 1000
      val timeObj = TimeObj(endTime, 2, DateUtil.format(start, DatePattern.NORM_DATE_PATTERN), DateUtil.format(end, DatePattern.NORM_DATE_PATTERN), DateUtil.format(DateUtil.date(endTime * 1000), DatePattern.NORM_DATE_PATTERN))
      println("往前第" + monthNum + "月:" + timeObj)
      timeObj
    })
  }

  def getRecentQuartersTimeStamp(dateTime: DateTime, totalQuartersBefore: Int) = {
    println("******************   季度--getRecentQuartersTimeStamp    *************************")
    val weekRange = Range.Long(1, totalQuartersBefore, 1)
    weekRange.map(monthNum => {
      val monthTime = DateUtil.offsetMonth(dateTime, -monthNum.toInt * 3)
      //按时间戳的秒单位做时间戳的值
      val endOfQuarter = monthTime.getTime / 1000
      val start = DateUtil.beginOfQuarter(monthTime)
      val end = DateUtil.endOfQuarter(monthTime)
      val endTime = end.getTime / 1000
      val timeObj = TimeObj(endTime, 3, DateUtil.format(start, DatePattern.NORM_DATE_PATTERN), DateUtil.format(end, DatePattern.NORM_DATE_PATTERN), DateUtil.format(DateUtil.date(endTime * 1000), DatePattern.NORM_DATE_PATTERN))
      println("往前第" + monthNum + "个季度:" + timeObj)
      timeObj
    })
  }

  def getRecentHalfYearsTimeStamp(dateTime: DateTime, totalYearsBefore: Int) = {
    println("******************   半年--getRecentHalfYearsTimeStamp    *************************")
    val weekRange = Range.Long(1, totalYearsBefore, 1)
    var endOfHalfYear = DateUtil.endOfYear(dateTime)
    var starOfHalfYear = DateUtil.offsetMonth(DateUtil.beginOfYear(dateTime), 6)
    weekRange.map(halfYearNum => {
      val start = starOfHalfYear
      val end = endOfHalfYear
      //按时间戳的秒单位做时间戳的值
      val endTime = endOfHalfYear.getTime / 1000
      val timeObj = TimeObj(endTime, 4, DateUtil.format(start, DatePattern.NORM_DATE_PATTERN), DateUtil.format(end, DatePattern.NORM_DATE_PATTERN), DateUtil.format(DateUtil.date(endTime * 1000), DatePattern.NORM_DATE_PATTERN))
      starOfHalfYear = DateUtil.offsetMonth(start, -6)
      endOfHalfYear = DateUtil.offsetMonth(endOfHalfYear, -6)
      println("往前第" + halfYearNum + "个半年:" + timeObj)
      timeObj
    })
  }

  def getRecentYearsTimeStamp(dateTime: DateTime, totalYearsBefore: Int) = {
    println("******************   年--getRecentYearsTimeStamp    *************************")
    val weekRange = Range.Long(0, totalYearsBefore, 1)
    weekRange.map(yearNum => {
      val starOfYear = DateUtil.offsetMonth(DateUtil.beginOfYear(dateTime), -12 * yearNum.toInt)
      val endOfYear = DateUtil.offsetMonth(DateUtil.endOfYear(dateTime), -12 * yearNum.toInt)
      //按时间戳的秒单位做时间戳的值
      val endTime = endOfYear.getTime / 1000
      val timeObj = TimeObj(endTime, 5, DateUtil.format(starOfYear, DatePattern.NORM_DATE_PATTERN), DateUtil.format(endOfYear, DatePattern.NORM_DATE_PATTERN), DateUtil.format(DateUtil.date(endTime * 1000), DatePattern.NORM_DATE_PATTERN))
      println("往前第" + (yearNum + 1) + "年:" + timeObj)
      timeObj
    })
  }

  def getBeginYearToLastMonthTimeStamp(currentTime: DateTime, totalMonthBefore: Int) = {
    println("******************   今年以来--getBeginYearToLastMonthTimeStamp    *************************")
    val weekRange = Range.Long(1, totalMonthBefore, 1)
    weekRange.map(monthNum => {
      //前一年
      val latMonthEndTime = DateUtil.endOfMonth(DateUtil.offsetMonth(currentTime, -monthNum.toInt))
      //按时间戳的秒单位做时间戳的值
      val start = DateUtil.beginOfYear(latMonthEndTime)
      val end = DateUtil.endOfMonth(latMonthEndTime)
      val endTime = end.getTime / 1000
      val timeObj = TimeObj(endTime, 6, DateUtil.format(start, DatePattern.NORM_DATE_PATTERN), DateUtil.format(end, DatePattern.NORM_DATE_PATTERN), DateUtil.format(DateUtil.date(endTime * 1000), DatePattern.NORM_DATE_PATTERN))
      println("往前今年以来第" + monthNum + "月:" + timeObj)
      timeObj
    })
  }

}

case class TimeObj(timestamp: Long, schedulerType: Int, start: String, end: String, reCheckDay: String)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值