Получить текущее время в виде форматированной строки в Go?

Как лучше всего получить текущую метку времени в Go и преобразовать ее в строку? Мне нужны дата и время, например. ГГГГММДДччммсс формат.


person brianoh    schedule 04.05.2011    source источник
comment
Это все, что вам нужно golangprograms .com /   -  person Eduardo A. Fernández Díaz    schedule 26.11.2019


Ответы (8)


Используйте функцию time.Now() и _ 2_.

t := time.Now()
fmt.Println(t.Format("20060102150405"))

распечатывает 20110504111515, или, по крайней мере, это было несколько минут назад. (Я использую летнее время по восточному времени.) В константах < / a> определено во временном пакете.

Вы можете использовать time.Now().UTC(), если вы предпочитаете UTC, а не местный часовой пояс.

person nmichaels    schedule 04.05.2011
comment
Мне определенно нравится константа Kitchen (= "3:04PM") - person tux21b; 04.05.2011
comment
Спасибо за эту информацию. Как пакет времени узнает, передав 20060102150405, что именно мы передаем, поскольку это не одна из предопределенных констант в пакете времени? Какое значение имеют эта дата и время в пакете времени (20060102150405)? Мне это кажется немного странным, но пока он работает, я полагаю, это не имеет значения, если мы не делаем ошибки при его кодировании. Я предполагаю, что они не сочли нужным предоставлять константу для этого формата и соответствовать шаблону строки. - person brianoh; 05.05.2011
comment
@brianoh: см. golang.org/pkg/time/#Constants Сейчас время 01 / 02 03:04:05 PM '06 -0700 Поскольку каждый компонент имеет разный номер (1, 2, 3 и т. Д.), Он может определить по номерам, какие компоненты вам нужны. - person newacct; 05.05.2011
comment
Обратите внимание, что time.LocalTime () больше не существует: см. Мой ответ ниже, чтобы быть совместимым с Go 1.0.3 - person Deleplace; 16.01.2013

Все остальные ответы очень неуместны для тех, кто пришел из Google и ищет "временную метку на ходу"! ГГГГММДДччммсс не является «отметкой времени».

Чтобы получить временную метку текущей даты (количество секунд с января 1970 г.), правильной функцией является .Unix (), и он действительно возвращает целое число

person Bactisme    schedule 29.06.2016
comment
Я согласен; вопрос должен быть озаглавлен "Текущая дата, а не текущая отметка времени" - person developerbmw; 12.08.2016
comment
Хотя уже поздно, я думаю .Unix () должен указывать на golang.org/pkg/time /#Time.Unix, возвращаемый тип которого - int64. - person bornfree; 11.02.2018
comment
Хотя вы технически правы, я думаю, что многие программисты в наши дни объединяют метку времени с «текущим временем в некотором отформатированном виде», так что этот заголовок будет в равной степени запутанным для большинства. - person Roger Hill; 30.01.2019
comment
Я предложил правку - Get current time as formatted string in Go?. Надеюсь, кто-нибудь это одобрит. - person akki; 27.11.2019

Для удобства чтения лучше всего использовать константы RFC во временном пакете (мне кажется)

import "fmt" 
import "time"

func main() {
    fmt.Println(time.Now().Format(time.RFC850))
}
person matthewmcneely    schedule 12.09.2013
comment
Как это дает YYYYMMDDhhmmss? - person Rod; 26.05.2016
comment
RFC850 производит Tuesday, 10-Nov-09 23:00:00 UTC RFC3339 = "2006-01-02T15:04:05Z07:00" play.golang.org/p/XmobwWSz5pN golang.org/pkg/time - person Chris McKee; 02.10.2019

Используйте time.Now () и time.Format () функции (поскольку time.LocalTime () больше не существует в Go 1.0.3)

t := time.Now()
fmt.Println(t.Format("20060102150405"))

Онлайн-демонстрация (с датой, установленной в прошлом на игровой площадке, неважно)

person Deleplace    schedule 30.12.2012
comment
И вы можете использовать его просто как строку, подобную этой: s := "Actual time is: "+time.Now().String() - person Michael; 09.03.2014

Дополнительную информацию можно найти в этом сообщении: Получить текущую дату и время в различных форматах в голанге

Это вкус различных форматов, которые вы найдете в предыдущем посте:

введите здесь описание изображения

person Eduardo A. Fernández Díaz    schedule 26.11.2019

Как отголосок ответа @Bactisme, способ получения текущей метки времени (например, в миллисекундах):

msec := time.Now().UnixNano() / 1000000

Ресурс: https://gobyexample.com/epoch

person Jack Ryan    schedule 22.08.2017

https://golang.org/src/time/format.go указано для анализа время 15 используется для часов, 04 используется для минут, 05 для секунд.

Для разбора Date 11, Jan, January для месяцев, 02, Mon, Monday для дня месяца, 2006 для года и, конечно, MST для зоны

Но вы также можете использовать этот макет, который я считаю очень простым. "Mon Jan 2 15:04:05 MST 2006"

    const layout = "Mon Jan 2 15:04:05 MST 2006"
    userTimeString := "Fri Dec 6 13:05:05 CET 2019"

    t, _ := time.Parse(layout, userTimeString)
    fmt.Println("Server: ", t.Format(time.RFC850))
    //Server:  Friday, 06-Dec-19 13:05:05 CET

    mumbai, _ := time.LoadLocation("Asia/Kolkata")
    mumbaiTime := t.In(mumbai)
    fmt.Println("Mumbai: ", mumbaiTime.Format(time.RFC850))
    //Mumbai:  Friday, 06-Dec-19 18:35:05 IST

ДЕМО

person STEEL    schedule 06.12.2019

Чтобы ответить на точный вопрос:

import "github.com/golang/protobuf/ptypes"

Timestamp, _ = ptypes.TimestampProto(time.Now())
person suran    schedule 09.11.2017
comment
Спасибо, Суран, это полезно, когда необходимо отправить отметку времени через grpc. - person rajeshk; 09.03.2019