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

如何使用Groovy从java.sql.Timestamp提取秒与纳秒部分?

针对时间戳处理的两个问题解答

问题1:如何从时间戳中仅提取秒数?

这里有两种常用的方式,看你更倾向哪种:

  • 直接调用Timestamp的getSeconds()方法(虽然Java 8+标记为过时,但Groovy环境下依然可用,适合快速实现):
    def time = new Timestamp(System.currentTimeMillis())
    int seconds = time.getSeconds()
    println(seconds) // 输出0-59之间的秒数
    
  • 推荐使用Java 8+的现代时间API(更规范,无过时风险):
    def time = new Timestamp(System.currentTimeMillis())
    int seconds = time.toLocalDateTime().getSecond()
    println(seconds)
    

问题2:提取秒和纳秒部分(如19.444)

你的需求是拿到「秒.毫秒」格式的结果,刚好Timestamp提供了获取纳秒的方法,我们可以把纳秒转成毫秒级的小数部分,和秒数组合:

方法1:得到字符串格式的结果(如"19.444")

def time = new Timestamp(System.currentTimeMillis())
// 获取秒数
int seconds = time.toLocalDateTime().getSecond()
// 获取纳秒并转成三位毫秒(1纳秒=1e-6毫秒,所以除以1000000)
long millisPart = time.getNanos() / 1000000
// 格式化确保是三位数字(比如纳秒是444000000的话,转成444)
String result = "${seconds}.${String.format("%03d", millisPart)}"
println(result)

方法2:得到数值类型的结果(如19.444)

如果需要用数值进行计算,可以直接转换成Double:

def time = new Timestamp(System.currentTimeMillis())
// 秒数 + 纳秒转成的秒数(1纳秒=1e-9秒)
double secondsWithFraction = time.toLocalDateTime().getSecond() + (time.getNanos() / 1e9)
// 保留三位小数,避免精度问题
BigDecimal formatted = BigDecimal.valueOf(secondsWithFraction).setScale(3, RoundingMode.HALF_UP)
println(formatted.doubleValue())

方法3:从时间戳字符串中提取(如果已经有字符串形式)

要是你已经把Timestamp转成了字符串,也可以用正则直接匹配:

def timeStr = time.toString() // 比如"2018-01-24 13:56:19.444"
def pattern = ~/:(\d+\.\d{3})$/
def matcher = timeStr =~ pattern
if (matcher.find()) {
    println(matcher.group(1)) // 输出"19.444"
}

内容的提问来源于stack exchange,提问作者Code123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:22:04