Obter hora atual como sequência formatada no Go?

131

Qual é a melhor maneira de obter o carimbo de data / hora atual no Go e converter em string? Eu preciso de data e hora, por exemplo. Formato AAAAMMDDhhmmss.

brianoh
fonte
1
Isso é tudo o que você precisa golangprograms.com/…
Eduardo A. Fernández Díaz

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.

nmichaels
fonte
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

Bactismo
fonte
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
56

Para facilitar a leitura, é melhor usar as constantes RFC no pacote de tempo (eu acho)

import "fmt" 
import "time"

func main() {
    fmt.Println(time.Now().Format(time.RFC850))
}
matthewmcneely
fonte
4
Como isso produz YYYYMMDDhhmmss?
Rod
2
RFC850 produz Tuesday, 10-Nov-09 23:00:00 UTC RFC3339 = "2006-01-02T15:04:05Z07:00" play.golang.org/p/XmobwWSz5pN golang.org/pkg/time
Chris McKee
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)

Deleplace
fonte
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

Jack Ryan
fonte
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

AÇO
fonte
-4

Para responder à pergunta exata:

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

Timestamp, _ = ptypes.TimestampProto(time.Now())
suran
fonte
Graças Suran, este é útil quando as necessidades de marcação de horário a ser enviar através grpc
rajeshk