「Groovy」- 处理日期时间

该笔记将记录:在 Apache Groovy 中,与时间有关的常用操作。

Patterns for Formatting and Parsing
https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#patterns

Predefined Formatters
https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#predefined

常用转义字符

println new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
println new Date().format("yyyy-MM-dd'T'HH:mm:ssXXX")

// 通过 '' 针对字符转义

Timestamp to Date String

soapui – Convert milliseconds to yyyy-MM-dd date-time format in Groovy – Stack Overflow

def timestamp = Long.valueOf("1726244425")
print new Date( timestamp * 1000 ).format("yyyyMMdd.HHmmss.SSS")

String => Date(“万能方法”)

很多时候,我们使用的日期格式比较随意,因此需要告诉 Parser 我们的日期格式:

def input = '2021-03-23T19:46:22+08:00'
def pattern = "yyyy-MM-dd'T'HH:mm:ssX"
def date = Date.parse(pattern, input)
assert date.toString() == 'Tue Mar 23 19:46:22 CST 2021'

// T:因为这里 T 是普通字符,所以需要使用 ' 进行转义处理
// X:ISO 8601 time zone,参考 Java 7 / java.text.SimpleDateFormat 文档。

将时间增加若干长度(e.g. currentDate + 5 seconds)

import groovy.time.TimeCategory

currentDate =  new Date()
use( TimeCategory ) {
    after30Mins = currentDate + 5.seconds
}

判断 | 时间是否在某范围内

public Boolean nowBetween(String beg, String end, String format = "HH:mm") {
	def timeBeg = new SimpleDateFormat(format).parse(beg);
	def timeEnd = new SimpleDateFormat(format).parse(end);
	def timeRange = timeBeg..timeEnd;

	def timeNow = new SimpleDateFormat(format).format(new Date());
	def time = new SimpleDateFormat(format).parse(timeNow);

	return timeRange.containsWithinBounds(time);
}

判断 | 时间是否为几天之前

def now = new Date()
def target = Date.parse('yyy-MM-dd HH:mm:ss Z', "xxxxxxx")
assert now - target > 7

def daysbefore = new Date() - 7
def target = Date.parse("yyy-MM-dd HH:mm:ss Z","2024-09-1 07:42:03 +0800 CST")
assert target < daysbefore

参考文献

DateTimeExtensions (Groovy 3.0.6)
SimpleDateFormat (Java Platform SE 7 )
date – Java SimpleDateFormat for time zone with a colon separator? – Stack Overflow

查 | 查询日期

Groovy – Dates & Times – Tutorialspoint

after(), equals(), before(), compareTo(), …

WIP

改 | 修改日期

datetime – Incrementing date object by hours/minutes in Groovy – Stack Overflow

previous(), next(), …

java – Subtract a date by 1 or 2 in groovy – Stack Overflow

WIP