如何在Groovy中将时间向下取整至最近的上一刻钟?
Groovy实现时间向下取整至最近的上一刻钟
方法一:使用Java 8+ java.time API(推荐)
java.time是Java 8引入的新一代日期时间API,线程安全且设计更优雅,Groovy完全兼容该API。
import java.time.LocalDateTime import java.time.temporal.ChronoUnit def floorToLastQuarter(LocalDateTime dateTime) { // 计算当前分钟数对应的整刻分钟值(向下取整到15的倍数) int flooredMinutes = (dateTime.minute / 15) * 15 // 设置分钟为整刻数,并截断秒、纳秒部分 return dateTime.withMinute(flooredMinutes).truncatedTo(ChronoUnit.SECONDS) } // 测试示例 def input = LocalDateTime.parse("2023-01-15T06:15:51") def output = floorToLastQuarter(input) println(output) // 输出:2023-01-15T06:15:00
逻辑说明:
- 通过整数除法
(dateTime.minute / 15)得到当前分钟所在的刻钟区间(0对应0-14分,1对应15-29分,以此类推) - 乘以15得到该区间的起始分钟数
- 调用
withMinute()更新分钟值,再用truncatedTo(ChronoUnit.SECONDS)清零秒和纳秒
方法二:兼容旧版java.util.Date API
如果需要处理旧的Date类型,可以用Calendar类实现:
import java.util.Date import java.util.Calendar import java.text.SimpleDateFormat def floorToLastQuarter(Date date) { def cal = Calendar.getInstance() cal.time = date int flooredMinutes = (cal.get(Calendar.MINUTE) / 15) * 15 cal.set(Calendar.MINUTE, flooredMinutes) cal.set(Calendar.SECOND, 0) cal.set(Calendar.MILLISECOND, 0) return cal.time } // 测试示例 def sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss") def inputDate = sdf.parse("2023-01-15T06:15:51") def outputDate = floorToLastQuarter(inputDate) println(sdf.format(outputDate)) // 输出:2023-01-15T06:15:00
边界情况验证
- 输入
2023-01-15T06:07:30→ 输出2023-01-15T06:00:00 - 输入
2023-01-15T06:22:10→ 输出2023-01-15T06:15:00 - 输入
2023-01-15T06:59:59→ 输出2023-01-15T06:45:00
内容的提问来源于stack exchange,提问作者Sai Ganesh
相关产品推荐
相关产品推荐

