Groovy入门:如何获取指定日期的Unix时间戳而非当前日期的
嘿,这个需求很常见,Groovy里处理指定日期转Unix时间戳其实挺简单的,我给你捋清楚步骤哈~
解决方案
核心思路是:先把你输入的日期字符串按照它的格式解析成Date对象,再将Date对象转换成Unix时间戳(也就是从1970年1月1日到该日期的秒数)。这里给你两种实用的实现方式:
方式一:Groovy简化写法(推荐)
Groovy对Java的日期处理做了简化,自带的Date.parse()方法可以直接解析日期字符串,不用手动创建格式对象,代码更清爽:
// 定义你要转换的日期字符串,以及对应的格式(必须完全匹配!) def targetDateStr = "31-12-2020, 10:00:00" def datePattern = "dd-MM-yyyy, HH:mm:ss" // 解析成Date对象 Date specifiedDate = Date.parse(datePattern, targetDateStr) // 转成Unix时间戳(把毫秒数转成秒,除以1000) long unixTimestamp = specifiedDate.getTime() / 1000 println "指定日期的Unix时间戳:${unixTimestamp}"
方式二:标准Java兼容写法
如果你更习惯Java的编码风格,也可以用SimpleDateFormat来实现,逻辑完全一致,还能方便地处理解析异常:
import java.text.SimpleDateFormat import java.text.ParseException def targetDateStr = "31-12-2020, 10:00:00" def dateFormatter = new SimpleDateFormat("dd-MM-yyyy, HH:mm:ss") try { Date specifiedDate = dateFormatter.parse(targetDateStr) long unixTimestamp = specifiedDate.getTime() / 1000 println "指定日期的Unix时间戳:${unixTimestamp}" } catch (ParseException e) { println "日期解析出错啦!请检查输入字符串和格式是否匹配:${e.message}" }
关键注意事项
- 格式串必须和输入的日期字符串完全对应:比如你的输入是
31-12-2020, 10:00:00,格式就要用dd-MM-yyyy, HH:mm:ss——其中dd是两位日期、MM是两位月份、yyyy是四位年份、HH是24小时制小时,逗号和空格也要一模一样,不然会解析失败。 - 如果需要保留毫秒级精度,就不用除以1000;如果要精确到秒,除以1000即可(Groovy会自动处理整数取整)。
内容的提问来源于stack exchange,提问作者Tobitor




