代码如下:
// 当天前后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日”))这样定义