在Groovy for Jira中解析日期字符串而不丢失时区

问题描述 投票:0回答:2

我有使用不同时区创建的日期字符串,我需要以不同的格式显示它们,但仍然显示每个时间区的原始时区。

我能够解析,但它解析为unix时间戳,然后丢失原始时区。

def dateCreated = issue.fields.created
// 2018-12-21T10:20:00.483-0800

def dateParsed = Date.parse("yyyy-MM-dd'T'HH:mm:ss.SSSz", dateCreated)
// 1545416400483

def dateFormatted = dateParsed.format('yyyy-MM-dd h:mm a, z')
// 2018-12-21 6:20 PM, UTC

有没有办法解析/格式化到所需的格式而不会丢失中间的时区?

groovy jira
2个回答
0
投票

在java8中有解析/格式化datetime的新类:

import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter

def dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX")
ZonedDateTime zdt = ZonedDateTime.parse('2018-12-21T10:20:00.483-0800',dtf)
println zdt.getZone()

从groovy 2.5开始,这段代码可以最小化到

ZonedDateTime zdt = ZonedDateTime.parse('2018-12-21T10:20:00.483-0800',"yyyy-MM-dd'T'HH:mm:ss.SSSX")
println zdt.getZone()

0
投票

好吧,我意识到这实际上并没有让我得到我想要的东西。原始字符串使用-0800,它是一个偏移量,而不是时区。所以我查看了API响应中的其他位置,找到了创建问题的人的时区。我用这个来正确地格式化日期。

最终代码:

def dateCreated = issue.fields.created
// 2018-12-21T10:20:00.483-0800

def creatorTimeZone = issue.fields.creator.timeZone
// America/Los_Angeles

def dateParsed = Date.parse("yyyy-MM-dd'T'HH:mm:ss.SSSz", dateCreated)
// 1545416400483

def dateFormatted = dateParsed.format('yyyy-MM-dd h:mm a, z', TimeZone.getTimeZone(creatorTimeZone))
// 2018-12-21 10:20 AM, PST
© www.soinside.com 2019 - 2024. All rights reserved.