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

时间:2018-12-27 16:33:21

标签: groovy jira

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

我可以解析,但是它解析为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

是否有一种方法可以直接解析/格式化为所需的格式而又不会丢失中间的时区?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在Java8中,有一些新类可以解析/格式化日期时间:

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()