在Groovy for Jira中解析日期字符串而不丢失时区
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Groovy for 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
有没有办法解析/格式化到所需的格式而不会丢失中间的时区?
答案
在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()
另一答案
好吧,我意识到这实际上并没有让我得到我想要的东西。原始字符串使用-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
以上是关于在Groovy for Jira中解析日期字符串而不丢失时区的主要内容,如果未能解决你的问题,请参考以下文章