Obtenir l'heure actuelle sous forme de chaîne formatée dans Go?

131

Quelle est la meilleure façon d'obtenir l'horodatage actuel dans Go et de la convertir en chaîne? J'ai besoin de la date et de l'heure par exemple. Format AAAAMMJJhhmmss.

brianoh
la source
1
C'est tout ce dont vous avez besoin golangprograms.com
Eduardo A. Fernández Díaz

Réponses:

149

Utilisez la time.Now()fonction et la time.Format()méthode.

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

imprime 20110504111515, ou du moins il l'a fait il y a quelques minutes. (Je suis à l'heure avancée de l'Est.) Il existe plusieurs formats d'heure prédéfinis dans les constantes définies dans le package horaire.

Vous pouvez utiliser time.Now().UTC()si vous préférez avoir UTC plutôt que votre fuseau horaire local.

nmichaels
la source
15
J'aime vraiment la Kitchenconstante ( = "3:04PM")
tux21b
5
Merci pour cette information. Comment le package de temps sait-il, après avoir passé "20060102150405", ce que nous passons, car ce n'est pas l'une des constantes prédéfinies dans le package de temps? Quelle est la signification de cette date et de cette heure dans le package horaire (20060102150405)? Cela me semble un peu bizarre, mais tant que cela fonctionne, je suppose que cela n'a pas d'importance tant que nous ne faisons pas d'erreur lors du codage. Je suppose qu'ils n'ont pas jugé bon de fournir une constante pour ce format et de correspondre au modèle de chaîne.
brianoh
9
@brianoh: Voir golang.org/pkg/time/#Constants C'est l'heure "01/02 03:04:05 PM '06 -0700" Parce que chaque composant a un numéro différent (1, 2, 3, etc.), il peut déterminer à partir des nombres quels composants vous voulez.
newacct
1
Veuillez noter que time.LocalTime () n'existe plus: voir ma réponse ci-dessous pour être compatible avec Go 1.0.3
Deleplace
71

Toutes les autres réponses sont très mal dirigées pour quelqu'un venant de Google et recherchant "horodatage en cours"! AAAAMMJJhhmmss n'est pas un "horodatage".

Pour obtenir le "timestamp" d'une date in go (nombre de secondes à partir de janvier 1970), la fonction correcte est .Unix () , et elle renvoie vraiment un entier

Bactisme
la source
8
Je suis d'accord; la question doit être intitulée «date actuelle» et non «horodatage actuel»
developerbmw
1
Bien qu'il soit tard, je pense que .Unix () devrait pointer vers golang.org/pkg/time/#Time.Unix dont le type de retour est int64.
bornfree le
Bien que vous ayez techniquement raison, je pense que de nombreux codeurs de nos jours confondent l'horodatage avec «l'heure actuelle d'une manière ou d'une autre formatée», de sorte que ce titre serait tout aussi déroutant pour la plupart.
Roger Hill
J'ai suggéré une modification - Get current time as formatted string in Go?. J'espère que quelqu'un l'approuvera.
akki
56

Pour la lisibilité, il est préférable d'utiliser les constantes RFC dans le package de temps (je pense)

import "fmt" 
import "time"

func main() {
    fmt.Println(time.Now().Format(time.RFC850))
}
matthewmcneely
la source
4
Comment cela produit-il AAAAMMJJhhmmss?
Rod
2
RFC850 produit 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
33

Utilisez les fonctions time.Now () et time.Format () (car time.LocalTime () n'existe plus depuis Go 1.0.3)

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

Démo en ligne (avec date fixée dans le passé dans le terrain de jeu, peu importe)

Deleplace
la source
6
Et vous pouvez l'utiliser simplement comme une chaîne comme celle-ci:s := "Actual time is: "+time.Now().String()
Michael
2

En écho à la réponse de @ Bactisme, la façon dont on procéderait pour récupérer l'horodatage actuel (en millisecondes, par exemple) est:

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

Ressource: https://gobyexample.com/epoch

Jack Ryan
la source
0

https://golang.org/src/time/format.go spécifié Pour l'analyse, le temps 15est utilisé pour les heures, 04est utilisé pour les minutes, 05pour les secondes.

Pour l' analyse syntaxique date 11, Jan, Januaryest depuis des mois, 02, Mon, Mondaypour le jour du mois, 2006pour l' année et bien sûr MSTpour la zone

Mais vous pouvez également utiliser cette disposition, que je trouve très simple. "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

ACIER
la source
-4

Pour répondre à la question exacte:

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

Timestamp, _ = ptypes.TimestampProto(time.Now())
suran
la source
Merci Suran, cela est utile lorsque l'horodatage doit être envoyé via GRPC
rajeshk