使用日期/时间类型时的一个常见用例是将它们转换为字符串(格式化)和字符串(解析)。Groovy 提供了这些额外的格式化方法:
方法 | 描述 | 例子 |
---|---|---|
getDateString() | 对于LocalDate和LocalDateTime, 格式为 DateTimeFormatter.ISO_LOCAL_DATE | 2018-03-10 |
对于OffsetDateTime, 格式为 DateTimeFormatter.ISO_OFFSET_DATE | 2018-03-10+04:00 | |
For ZonedDateTime, 格式化 DateTimeFormatter.ISO_LOCAL_DATE 并附加ZoneId短名称 | 2018-03-10EST | |
getDateTimeString() | 对于LocalDateTime, 格式为 DateTimeFormatter.ISO_LOCAL_DATE_TIME | 2018-03-10T20:30:45 |
对于OffsetDateTime, 格式为 DateTimeFormatter.ISO_OFFSET_DATE_TIME | 2018-03-10T20:30:45+04:00 | |
For ZonedDateTime, 格式化 DateTimeFormatter.ISO_LOCAL_DATE_TIME 并附加ZoneId短名称 | 2018-03-10T20:30:45EST | |
getTimeString() | 对于LocalTime和LocalDateTime, 格式为 DateTimeFormatter.ISO_LOCAL_TIME | 20:30:45 |
ForOffsetTime和OffsetDateTime, 使用格式化程序的 DateTimeFormatter.ISO_OFFSET_TIME 格式 | 20:30:45+04:00 | |
For ZonedDateTime, 格式化 DateTimeFormatter.ISO_LOCAL_TIME 并附加ZoneId短名称 | 20:30:45EST | |
format(FormatStyle style) | 对于LocalTime和OffsetTime, 格式为 DateTimeFormatter.ofLocalizedTime(style) | 4:30 AM(与风格FormatStyle.SHORT,例如) |
对于LocalDate, 格式为 DateTimeFormatter.ofLocalizedDate(style) | Saturday, March 10, 2018(与风格FormatStyle.FULL,例如) | |
对于LocalDateTime, OffsetDateTime, 和ZonedDateTime格式 DateTimeFormatter.ofLocalizedDateTime(style) | Mar 10, 2019 4:30:45 AM(与风格FormatStyle.MEDIUM,例如) | |
format(String pattern) | 格式与 DateTimeFormatter.ofPattern(pattern) | 03/10/2018(使用模式’MM/dd/yyyy’,例如) |
对于解析,Groovyparse为许多 JSR 310 类型添加了一个静态方法。该方法有两个参数:要格式化的值和要使用的模式。模式由 java.time.format.DateTimeFormatterAPI定义。举个例子:
def date = LocalDate.parse('Jun 3, 04', 'MMM d, yy')
assert date == LocalDate.of(2004, Month.JUNE, 3)
def time = LocalTime.parse('4:45', 'H:mm')
assert time == LocalTime.of(4, 45, 0)
def offsetTime = OffsetTime.parse('09:47:51-1234', 'HH:mm:ssZ')
assert offsetTime == OffsetTime.of(9, 47, 51, 0, ZoneOffset.ofHoursMinutes(-12, -34))
def dateTime = ZonedDateTime.parse('2017/07/11 9:47PM Pacific Standard Time', 'yyyy/MM/dd h:mma zzzz')
assert dateTime == ZonedDateTime.of(
LocalDate.of(2017, 7, 11),
LocalTime.of(21, 47, 0),
ZoneId.of('America/Los_Angeles')
)
注意,Groovy
这些parse
方法的参数顺序与添加到java.util.Date
中的静态parse方法不同。这样做是为了与Date/Time API的现有解析方法保持一致。