Разобрать строку даты без потери часового пояса в Groovy для Jira - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть строки дат, создаваемые с разными часовыми поясами, и мне нужно отображать их в другом формате, но все равно показывая исходный часовой пояс каждого из них.

Я могу выполнить синтаксический анализ, но он анализируется ввременная метка 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 голосов
/ 27 декабря 2018

в 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()
0 голосов
/ 27 декабря 2018

Хорошо, я понял, что это на самом деле не даст мне то, что я хочу.Исходная строка использует -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
...