Что такое эквивалентный код в golang для следующей команды оболочки?
date -u +%Y-%m-%dT%T%z
Как преобразовать время ISO 8601 в golang?
Ответ 1
package main
import (
"time"
"fmt"
)
func main(){
fmt.Println(time.Now().Format(time.RFC3339))
}
Ответ 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