Подтвердить что ты не робот

Как преобразовать время ISO 8601 в golang?

Что такое эквивалентный код в golang для следующей команды оболочки? date -u +%Y-%m-%dT%T%z

4b9b3361

Ответ 2

package main

import (
    "fmt"
    "time"
)

func main() {
    fmt.Println(time.Now().UTC().Format("2006-01-02T15:04:05-0700"))
}

Ответ 3

Замена знака в формате с помощью Z запускает поведение ISO 8601 печати Z вместо смещения для зоны UTC. Поэтому Z важен.

package main    
import (
    "fmt"
    "time"
)


func main() {
    fmt.Println(time.Now().UTC().Format("2006-01-02T15:04:05Z07:00"))
}
// this is the same format used by RFC3339. just a note on why. 

Ответ 4

ISO8601 допускает переменные уровни детализации. Вы можете указать только год, год + месяц, год + месяц + день, добавить часть времени и, необязательно, часть часового пояса. Однако встроенный анализ времени требует, чтобы вы заранее знали, какие части будут включены.

Библиотека github.com/btubbs/datetime предоставляет более гибкий анализатор, который может обрабатывать все широко используемые форматы ISO8601. Смотрите https://github.com/btubbs/datetime

Раскрытие: я написал эту библиотеку.

Ответ 5

У меня была следующая спецификация:

YYYY-MM-DDThh:mm:ss.sssZ

с финальным Z явным образом присутствующим в примерах.

Вот как я с этим справился:

  • Сначала я нашел time.RFCxxx, который был ближе всего к моей цели
  • Я скопировал его значение
  • Я возился с этим, пока не нашел ожидаемый результат

который

2006-01-02T15:04:05.999Z