You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

逻辑说明:

  1. 通过整数除法(dateTime.minute / 15)得到当前分钟所在的刻钟区间(0对应0-14分,1对应15-29分,以此类推)
  2. 乘以15得到该区间的起始分钟数
  3. 调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 03:35:27