使用日期/时间类型时的一个常见用例是将它们转换为字符串(格式化)和字符串(解析)。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定义。举个例子:

    1. def date = LocalDate.parse('Jun 3, 04', 'MMM d, yy')
    2. assert date == LocalDate.of(2004, Month.JUNE, 3)
    3. def time = LocalTime.parse('4:45', 'H:mm')
    4. assert time == LocalTime.of(4, 45, 0)
    5. def offsetTime = OffsetTime.parse('09:47:51-1234', 'HH:mm:ssZ')
    6. assert offsetTime == OffsetTime.of(9, 47, 51, 0, ZoneOffset.ofHoursMinutes(-12, -34))
    7. def dateTime = ZonedDateTime.parse('2017/07/11 9:47PM Pacific Standard Time', 'yyyy/MM/dd h:mma zzzz')
    8. assert dateTime == ZonedDateTime.of(
    9. LocalDate.of(2017, 7, 11),
    10. LocalTime.of(21, 47, 0),
    11. ZoneId.of('America/Los_Angeles')
    12. )

    注意,Groovy这些parse方法的参数顺序与添加到java.util.Date中的静态parse方法不同。这样做是为了与Date/Time API的现有解析方法保持一致。