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


Ответы:


149

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

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

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

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


15
Мне определенно нравится Kitchenконстанта ( = "3:04PM")
tux21b

5
Спасибо за эту информацию. Как пакет времени узнает, передавая «20060102150405», что именно мы передаем, поскольку это не одна из предопределенных констант в пакете времени? Какое значение имеют дата и время в пакете времени (20060102150405)? Мне это кажется немного странным, но пока он работает, я полагаю, это не имеет значения, если мы не делаем ошибки при кодировании. Я предполагаю, что они не сочли нужным предоставить константу для этого формата и соответствовать шаблону строки.
brianoh

9
@brianoh: См. golang.org/pkg/time/#Constants. Это время "01/02 15:04:05 PM '06 -0700", потому что каждый компонент имеет свой номер (1, 2, 3 и т. д.), он может определить по цифрам, какие компоненты вам нужны.
newacct

1
Обратите внимание, что time.LocalTime () больше не существует: см. Мой ответ ниже, чтобы быть совместимым с Go 1.0.3
Deleplace

71

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

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


8
Я согласен; вопрос должен быть озаглавлен «текущая дата», а не «текущая временная метка»
разработчик

1
Хотя уже поздно, я думаю .Unix () должен указывать на golang.org/pkg/time/#Time.Unix , возвращаемый тип которого - int64.
bornfree

Хотя вы технически правы, я думаю, что многие программисты в наши дни объединяют метку времени с «текущим временем в некотором отформатированном виде», так что этот заголовок будет в равной степени запутанным для большинства.
Роджер Хилл

Я предложил отредактировать - Get current time as formatted string in Go?. Надеюсь, кто-нибудь это одобрит.
Акки

56

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

import "fmt" 
import "time"

func main() {
    fmt.Println(time.Now().Format(time.RFC850))
}

4
Как это дает YYYYMMDDhhmmss?
Род

2
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
Крис Макки

33

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

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

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


6
И вы можете использовать это просто как строку, например:s := "Actual time is: "+time.Now().String()
Майкл



0

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

Для разбора даты 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

DEMO


-4

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

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

Timestamp, _ = ptypes.TimestampProto(time.Now())

Спасибо, Суран, это полезно, когда необходимо отправить метку времени через grpc
rajeshk
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.