Разобрать строку даты UTC и преобразовать в другой формат - PullRequest
0 голосов
/ 07 июня 2018

Идите новичок сюда.

У меня есть строка даты 2018-06-07T16:16:57Z, и я хочу преобразовать ее во что-то вроде этого mm/dd/yyyy hh:mm.

Это часто задаваемый вопрос,но я не могу найти какие-либо предыдущие вопросы, которые работают для меня.

Я читаю в поле времени и пытаюсь преобразовать, как это

time := row["Date & Time"]
fmt.Println(time)
t, _ := time.Parse("2006-01-02 15:04:05 -0700 UTC", time)
fmt.Println(t)

Но я думаю, что проблемав том, что у меня нет правильной строки формата.Я попробовал несколько ресурсов безуспешно.

Когда я печатаю t как есть, я получаю 0001-01-01 00:00:00 +0000 UTC в результате, что, очевидно, неверно.

Что бы янравится делать, это конвертировать время, в которое я читаю, вот так

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

У вас есть две проблемы.

Во-первых, вы не должны называть переменную time, поскольку это имя встроенного пакета.Я полагаю, вы знали, что это просто ошибка вставки копии.

Далее строка, которую вы передаете time.Parse(), - это строка формата, которая должна описывать формат строки времени изваша база данных.Вы уже знаете, что формат: 2018-06-07T16:16:57Z, так что просто использовать, что замена значения с отсчета времени Go содержит

1013 * Здесь работает вариант:. 1015

Запуск на игровой площадке


Более того, база данных формата времени часто описывается как RFC3339, которая также доступна как константа time.RFC3339 в Go.

Поэтому использование этого упрощает ваш код еще больше:

package main

import (
    "fmt"
    "time"
)

func main() {
    tm := "2018-06-07T16:16:57Z"
    fmt.Println(tm)
    t, err := time.Parse(time.RFC3339, tm)
    if err != nil {
        panic(err)
    }
    fmt.Println(t)
}

Запуск на игровой площадке


И если вы предпочитаете, вы также можете позволить драйверу базы данных преобразоватьвремя, отсканировав его в переменную time.Time.

Например:

var tm time.Time
if err = row.Scan(&tm); err != nil {
    panic(err)
}
fmt.Print(tm)
0 голосов
/ 07 июня 2018

Как описывает @mkopriva, расположение должно совпадать.Разберитесь с макетом 2006-01-02T15:04:05Z, пройдите Спецификация Golang для layout, используйте для преобразования строки в дату

Анализ разбирает отформатированную строку и возвращает ее значение временипредставляет собой.Формат определяет формат, показывая, как эталонное время определяется как

Mon Jan 2 15:04:05 -0700 MST 2006

, а затем используется возвращаемое значение времени до Format даты согласно вашему требованию.

package main

import (
    "fmt"
    "time"
)

func main() {
    layout1 := "2006-01-02T15:04:05Z"
    t, err := time.Parse(layout1, "2018-06-07T16:16:57Z")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(t.Format("01/02/2006 15:04"))
}

Проверьте это на Игровая площадка Go

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...