Вы можете использовать .UT C () метод time.Time
, чтобы получить значение времени в часовом поясе UT C, а затем переформатировать его снова в строку, после чего вы будете получить эквивалентную дату в UT C.
str1 := "2019-11-27T16:38:55+07:00"
tme1, _ := time.Parse(time.RFC3339, str1)
tme2 := tme1.UTC()
str2 := tme2.Format(time.RFC3339)
fmt.Println("str1", str1) // str1 2019-11-27T16:38:55+07:00
fmt.Println("str2", str2) // str2 2019-11-27T09:38:55Z
Рабочая площадка https://play.golang.org/p/7uRKDeRZBUx
Это для API, который будет используется интерфейсным приложением, которое требует его форматирования следующим образом.
Находится ли он в javascript, go или любом другом языке программирования / сценариев, анализируя эквивалентную строку дат в другом часовом поясе приведёт эквивалентную дату. Посмотрите на приведенный ниже пример в js:
console.log(new Date("2019-11-27T16:38:55+07:00").toString())
// "Wed Nov 27 2019 16:38:55 GMT+0700 (Western Indonesia Time)"
console.log(new Date("2019-11-27T09:38:55Z").toString())
// "Wed Nov 27 2019 16:38:55 GMT+0700 (Western Indonesia Time)"
См., Что обе операции разбора даты генерируют одну и ту же строку после анализа и преобразования в строку