我创建的日期字符串具有不同的时区,我需要以不同的格式显示它们,但仍显示每个人的原始时区。
我可以解析,但是它解析为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
是否有一种方法可以直接解析/格式化为所需的格式而又不会丢失中间的时区?
答案 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()