Ricevi l'ora corrente come stringa formattata in Vai?


Risposte:


149

Utilizzare la time.Now()funzione e il time.Format()metodo.

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

stampa 20110504111515, o almeno lo ha fatto pochi minuti fa. (Sono nell'ora legale orientale.) Ci sono diversi formati di ora predefiniti nelle costanti definite nel pacchetto orario.

Puoi utilizzare time.Now().UTC()se preferisci avere UTC piuttosto che il tuo fuso orario locale.


15
Mi piace sicuramente la Kitchencostante ( = "3:04PM")
tux21b,

5
Grazie per quelle informazioni. Come fa il pacchetto temporale a sapere passando "20060102150405", proprio quello che stiamo passando, in quanto non è una delle costanti predefinite nel pacchetto temporale? Qual è il significato di quella data e ora nel pacchetto orario (20060102150405)? Mi sembra un po 'eccentrico, ma finché funziona suppongo che non abbia importanza finché non commettiamo un errore durante la codifica. Immagino che non abbiano ritenuto opportuno fornire una costante per quel formato e corrispondere al modello di stringa.
brianoh

9
@brianoh: vedi golang.org/pkg/time/#Constants È l'ora "01/02 03:04:05 PM '06 -0700" Perché ogni componente ha un numero diverso (1, 2, 3, ecc.), può determinare dai numeri quali componenti vuoi.
newacct

1
Nota che time.LocalTime () non esiste più: vedi la mia risposta di seguito per essere compatibile con Go 1.0.3
Deleplace

71

Tutte le altre risposte sono molto importanti per qualcuno che viene da Google e cerca "timestamp in go"! AAAAMMGGhhmmss non è un "timestamp".

Per ottenere il "timestamp" di una data in atto (numero di secondi da gennaio 1970), la funzione corretta è .Unix () e restituisce davvero un numero intero


8
Sono d'accordo; la domanda dovrebbe essere intitolata "data corrente" e non "data corrente"
Developerbmw

1
Anche se è tardi, penso .Unix () dovrebbe puntare a golang.org/pkg/time/#Time.Unix il cui tipo di ritorno è int64.
bornfree,

Sebbene tu sia tecnicamente corretto, penso che molti programmatori oggigiorno confondano il timestamp, "L'ora corrente in una sorta di modo formattato", quindi quel titolo sarebbe altrettanto confuso per la maggior parte.
Roger Hill,

Ho suggerito una modifica - Get current time as formatted string in Go?. Spero che qualcuno lo approvi.
Akki il


32

Utilizzare le funzioni time.Now () e time.Format () (poiché time.LocalTime () non esiste più a partire da Go 1.0.3)

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

Demo online (con data fissata in passato nel parco giochi, non importa)


6
E puoi usarlo semplicemente come una stringa come questa:s := "Actual time is: "+time.Now().String()
Michael


2

Come eco alla risposta di @ Bactisme, il modo in cui uno dovrebbe fare per recuperare il timestamp corrente (in millisecondi, per esempio) è:

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

Risorsa: https://gobyexample.com/epoch


0

https://golang.org/src/time/format.go specificato Per il tempo di analisi 15viene utilizzato per Ore, 04viene utilizzato per minuti, 05per secondi.

Per l'analisi di Data 11, Jan, Januaryè da mesi, 02, Mon, Mondayper il giorno del mese, 2006per l'anno e, naturalmente, MSTper la zona

Ma puoi usare anche questo layout, che trovo molto semplice. "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

Per rispondere alla domanda esatta:

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

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

Grazie Suran, questo è utile quando il timestamp deve essere inviato attraverso grpc
rajeshk
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.