Как преобразовать дату с часовым поясом в формат Javascript ISO? - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь преобразовать эту строку даты ("2018-10-29T11: 48: 09.180022-04: 00") в формат ISO в Go. Но не в состоянии сделать. Кто-нибудь может помочь?

основной пакет

import (
    "fmt"
    "time"
)

func main() {
    l,_ := time.Parse("2006-01-02T15:04:05Z07:00", "2018-10-29T15:18:20-04:00")
    fmt.Println(l, time.Now(), time.Now().UTC().Format("2006-01-02T15:04:05Z07:00"))
}

Выход:

2018-10-29 15:18:20 -0400 -0400 2009-11-10 23:00:00 +0000 UTC m=+0.000000001 2009-11-10T23:00:00Z

https://play.golang.org/p/gXw39_Y-hpR

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Обратите внимание, что ваша входная строка действительна Формат ISO 8601 .

Однако для сериализации JSON в JavaScript используется немного другой (но все еще полностью действующий) стиль формата даты ISO 8601, в котором для дробных секунд используются только 3 цифры (с разрешением в миллисекундах), а часовой пояс настроен на Всемирное координированное время (UTC) , (GMT + 0 или часовой пояс "Зулу"), обозначенное Z.

// JavaScript
JSON.stringify(new Date()); // => "2018-10-30T15:22:30.293Z"
// Millisecond resolution ─────────────────────────────┺┻┛┃
// "Zulu" (UTC) time zone ────────────────────────────────┚

Вы можете преобразовать свою временную метку в стиль JavaScript, сначала проанализировав входную строку, затем преобразовав время Зулу с помощью UTC() метода , а затем отформатировав с желаемым выходным форматом.

Например ( Go Playground ):

const (
  INPUT_FORMAT  = "2006-01-02T15:04:05.999999999-07:00"
  OUTPUT_FORMAT = "2006-01-02T15:04:05.000Z"
)

func timestampToJavaScriptISO(s string) (string, error) {
  t, err := time.Parse(INPUT_FORMAT, s)
  if err != nil {
    return "", err
  }
  return t.UTC().Format(OUTPUT_FORMAT), nil
}

func main() {
  s := "2018-10-29T11:48:09.180022-04:00"
  s2, err := timestampToJavaScriptISO(s)
  if err != nil {
    panic(err)
  }

  fmt.Println(s2)
  // 2018-10-29T15:48:09.180Z
}
0 голосов
/ 30 октября 2018

Вы можете просто конвертировать его, используя формат RFC3339:

 unitTimeInRFC3339 :=time.Now().Format(time.RFC3339)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...