kotlin用到的時間工具:前後x天,前後x分鐘,某小時初始,某小時結束,週一,週日,月第一天,月最後一天,季度第一天,季度最後一天,年度第一天,年度最後一天

代碼如下:

// 當天前後x天的時間,value負數表示x天前,正數表示x天后
    fun getDay(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        cal.add(Calendar.DAY_OF_MONTH, value)
        return Timestamp(cal.timeInMillis)
    }

    // 某個時間x分鐘前後的時間,value負數表示x分鐘前,正數表示x分鐘後
    fun getMinute(currentTime: Timestamp, value: Int): Timestamp {
        val cal = Calendar.getInstance()
        cal.time = currentTime
        cal.add(Calendar.MINUTE, value)
        return Timestamp(cal.timeInMillis)
    }

    // 當天某小時初始時間,value表示某小時
    fun getHourStart(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        cal.set(Calendar.HOUR_OF_DAY, value)
        cal.set(Calendar.SECOND, 0)
        cal.set(Calendar.MINUTE, 0)
        cal.set(Calendar.MILLISECOND, 0)
        return Timestamp(cal.timeInMillis)
    }

    // 當天某小時結束時間,value表示某小時
    fun getHourEnd(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        cal.set(Calendar.HOUR_OF_DAY, value)
        cal.set(Calendar.SECOND, 59)
        cal.set(Calendar.MINUTE, 59)
        cal.set(Calendar.MILLISECOND, 999)
        return Timestamp(cal.timeInMillis)
    }

    // 週一時間 value: 0表示本週,1表示下週,-1表示上週
    fun getWeekStartTime(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        val weekday = cal.get(Calendar.DAY_OF_WEEK) - value * 7
        cal.add(Calendar.DATE, 2 - weekday)
        return Timestamp(cal.timeInMillis)
    }

    // 週日時間 value: 0表示本週,1表示下週,-1表示上週
    fun getWeekEndTime(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        val weekday = cal.get(Calendar.DAY_OF_WEEK) - value * 7
        cal.add(Calendar.DATE, 8 - weekday)
        return Timestamp(cal.timeInMillis)
    }

    // 月第一天時間 value: 0表示本月,1表示下月,-1表示上月
    fun getMonthStartTime(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        cal.add(Calendar.MONTH, value);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH))
        return Timestamp(cal.timeInMillis)
    }

    // 月最後一天時間 value: 0表示本月,1表示下月,-1表示上月
    fun getMonthEndTime(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        cal.add(Calendar.MONTH, value);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH))
        return Timestamp(cal.timeInMillis)
    }

    // 季度第一天時間 value: 0表示本季度,1表示下季度,-1表示上季度
    fun getQuarterStartTime(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        val currentMonth = cal.get(Calendar.MONTH) + 1 + value * 3
        //只計算到去年第四季度或明年第一季度
        val month: Int = if (currentMonth < 1) 9 else if (currentMonth in 1..3) 0 else if (currentMonth in 4..6) 3 else if (currentMonth in 7..9) 6 else if (currentMonth in 10..12) 9 else 0
        if (currentMonth < 1) cal.add(Calendar.YEAR, -1) else if (currentMonth > 12) cal.add(Calendar.YEAR, 1) else {
        }
        cal.set(Calendar.MONTH, month)
        cal.set(Calendar.DATE, 1)
        return Timestamp(cal.timeInMillis)
    }

    // 季度最後一天時間 value: 0表示本季度,1表示下季度,-1表示上季度
    fun getQuarterEndTime(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        val currentMonth = cal.get(Calendar.MONTH) + 1 + value * 3
        //只計算到去年第四季度或明年第一季度
        val month: Int = if (currentMonth < 1) 11 else if (currentMonth in 1..3) 2 else if (currentMonth in 4..6) 5 else if (currentMonth in 7..9) 8 else if (currentMonth in 10..12) 11 else 2
        val day: Int = if (currentMonth < 1) 31 else if (currentMonth in 1..3) 31 else if (currentMonth in 4..6) 30 else if (currentMonth in 7..9) 30 else if (currentMonth in 10..12) 31 else 31
        if (currentMonth < 1) cal.add(Calendar.YEAR, -1) else if (currentMonth > 12) cal.add(Calendar.YEAR, 1) else {
        }
        cal.set(Calendar.MONTH, month)
        cal.set(Calendar.DATE, day)
        return Timestamp(cal.timeInMillis)
    }

    //年度第一天時間 value: 0表示今年,1表示明年,-1表示去年
    fun getYearStartTime(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        cal.add(Calendar.YEAR, value);
        cal.set(Calendar.MONTH, 0)
        cal.set(Calendar.DATE, 1)
        return Timestamp(cal.timeInMillis)
    }

    //年度最後一天時間 value: 0表示今年,1表示明年,-1表示去年
    fun getYearEndTime(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        cal.add(Calendar.YEAR, value);
        cal.set(Calendar.MONTH, 11)
        cal.set(Calendar.DATE, 31)
        return Timestamp(cal.timeInMillis)
    }

部分自測的結果

@Test
    fun testDate(){
        val value = 4
        val ds = commUtil.getHourStart(0)
        val de = commUtil.getHourEnd(23)
        val dd = commUtil.getHourStart(8)
        val ws = commUtil.getWeekStartTime(-38)
        val we = commUtil.getWeekEndTime(-38)
        val ms = commUtil.getMonthStartTime(value)
        val me = commUtil.getMonthEndTime(value)
        val qs = commUtil.getQuarterStartTime(-5)
        val qe = commUtil.getQuarterEndTime(-5)
        val ys = commUtil.getYearStartTime(value)
        val ye = commUtil.getYearEndTime(value)
        log.info(">>>天:$ds>>>$de>>>$dd>>>周:$ws>>>$we>>>月:$ms>>>$me>>>季:$qs>>>$qe>>>年:$ys>>>$ye")
    }

當天0點,當天24點,當天8點,38周前週一,38周前週日,四個月後月初,四個月後月末,去年第四季度起始,去年第四季度結束,四年年初,四年年末

>>>天:2018-09-19 00:00:00.0>>>2018-09-19 23:59:59.999>>>2018-09-19 08:00:00.0>>>周:2017-12-25 11:29:01.449>>>2017-12-31 11:29:01.449>>>月:2019-01-01 11:29:01.449>>>2019-01-31 11:29:01.449>>>季:2017-10-01 11:29:01.449>>>2017-12-31 11:29:01.449>>>年:2022-01-01 11:29:01.449>>>2022-12-31 11:29:01.449

---------------------------------2018-12-20增加-------------------------------------

// 獲取日期範圍(用於折線圖)
    fun getDateRange(startDate: String, endDate: String): List<String> {
        val sdf = SimpleDateFormat("yyyy-MM-dd")
        val ssdf = SimpleDateFormat("MM月dd日")
        val calendar = Calendar.getInstance()
        val sDate = sdf.parse(startDate)
        calendar.time = sDate
        val calendarEnd = Calendar.getInstance()
        calendarEnd.time = sDate
        val dateList = ArrayList<String>()
        dateList.add(ssdf.format(sDate))
        val edate = sdf.parse(endDate)
        while (calendarEnd.time.before(edate)) {
            calendarEnd.add(Calendar.DAY_OF_MONTH, 1)
            val tempDate = ssdf.format(calendarEnd.time)
            dateList.add(tempDate)
        }
        return dateList
    }

    // 獲取年月範圍(用於折線圖)
    fun getMonthRange(startDate: String, endDate: String): List<String> {
        val sdf = SimpleDateFormat("yyyy-MM")
        val calendar = Calendar.getInstance()
        val sd = sdf.parse(startDate)
        calendar.time = sd
        val monthList = ArrayList<String>()
        monthList.add(sdf.format(sd))
        val ed = sdf.parse(endDate)
        while (calendar.time.before(ed)) {
            calendar.add(Calendar.MONTH, 1)
            val tempDate = sdf.format(calendar.time)
            monthList.add(tempDate)
        }
        return monthList
    }

測試:

>>>[11月15日, 11月16日, 11月17日, 11月18日, 11月19日, 11月20日, 11月21日, 11月22日, 11月23日, 11月24日, 11月25日, 11月26日, 11月27日, 11月28日, 11月29日, 11月30日, 12月01日, 12月02日, 12月03日, 12月04日, 12月05日, 12月06日]
>>>[2018-01, 2018-02, 2018-03, 2018-04, 2018-05, 2018-06, 2018-07, 2018-08, 2018-09, 2018-10, 2018-11, 2018-12]

時間格式可以參照(SimpleDateFormat(“MM月dd日”))這樣定義

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章