Obter hora atual como sequência formatada no Go?


Respostas:


149

Use a time.Now()função e o time.Format()método

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

imprime 20110504111515, ou pelo menos há alguns minutos atrás. (Estou no horário de verão do leste). Existem vários formatos de hora predefinidos nas constantes definidas no pacote de horas.

Você pode usar time.Now().UTC()se preferir ter o UTC do que o seu fuso horário local.


15
Eu definitivamente gosto da Kitchenconstante ( = "3:04PM")
tux21b

5
Obrigado por essa informação. Como o pacote de horas sabe ao passar "20060102150405", exatamente o que estamos passando, pois não é uma das constantes predefinidas no pacote de horas? Qual é o significado dessa data e hora no pacote de horas (20060102150405)? Parece um pouco peculiar para mim, mas, desde que funcione, suponho que não importa, desde que não cometamos um erro ao codificá-lo. Eu acho que eles não acharam adequado fornecer uma constante para esse formato e corresponder ao padrão das strings.
Brianoh 5/05

9
@brianoh: consulte golang.org/pkg/time/#Constants É a hora "01/02 15:04:05 PM '06 -0700" Como cada componente possui um número diferente (1, 2, 3 etc.), pode determinar a partir dos números quais componentes você deseja.
newacct 5/05

1
Observe que time.LocalTime () não existe mais: veja minha resposta abaixo para ser compatível com Go 1.0.3
Deleplace

71

Todas as outras respostas são muito importantes para quem vem do google e procura por "timestamp in go"! AAAAMMDDhhmmss não é um "registro de data e hora".

Para obter o "registro de data e hora" de uma data em go (número de segundos a partir de janeiro de 1970), a função correta é .Unix () e realmente retorna um número inteiro


8
Concordo; a questão deve ser intitulado "data atual" não "timestamp atual"
developerbmw

1
Embora seja tarde, acho que .Unix () deve apontar para golang.org/pkg/time/#Time.Unix cujo tipo de retorno é int64.
BornFree

Enquanto você está tecnicamente correto, acho que muitos codificadores hoje em dia confundem o carimbo de hora com 'O horário atual de algum modo formatado', de modo que esse título seria igualmente confuso para a maioria.
Roger Hill

Eu sugeri uma edição - Get current time as formatted string in Go?. Espero que alguém o aprove.
akki


32

Use as funções time.Now () e time.Format () (pois time.LocalTime () não existe mais a partir do Go 1.0.3)

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

Demo online (com data fixada no passado no parquinho, não importa)


6
E você pode usá-lo simplesmente como uma cadeia de caracteres como esta:s := "Actual time is: "+time.Now().String()
Michael


2

Como eco da resposta do @ Bactisme, a maneira de recuperar o registro de data e hora atual (em milissegundos, por exemplo) é:

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

Recurso: https://gobyexample.com/epoch


0

https://golang.org/src/time/format.go especificado Para o tempo de análise, 15é usado o Horário, 04usado por minutos, 05por segundos.

Para analisar Data 11, Jan, Januaryé por meses, 02, Mon, Mondaypara o dia do mês, 2006para o ano e, claro, MSTpara a zona

Mas você também pode usar esse layout, que eu acho muito simples. "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

Para responder à pergunta exata:

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

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

Graças Suran, este é útil quando as necessidades de marcação de horário a ser enviar através grpc
rajeshk
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.