Convertir time.Time en chaîne

103

J'essaye d'ajouter quelques valeurs de ma base de données à un []stringdans Go. Certains d'entre eux sont des horodatages.

J'obtiens l'erreur:

impossible d'utiliser U.Created_date (type time.Time) comme chaîne de type dans l'élément de tableau

Puis-je convertir time.Timeen string?

type UsersSession struct {
    Userid int
    Timestamp time.Time
    Created_date time.Time
}

type Users struct {
    Name string
    Email string
    Country string
    Created_date time.Time
    Id int
    Hash string
    IP string
}

-

var usersArray = [][]string{}

rows, err := db.Query("SELECT u.id, u.hash, u.name, u.email, u.country, u.IP, u.created_date, us.timestamp, us.created_date FROM usersSession AS us LEFT JOIN users AS u ON u.id = us.userid WHERE us.timestamp + interval 30 minute >= now()")

U := Users{}
US := UsersSession{}

for rows.Next() {
    err = rows.Scan(&U.Id, &U.Hash, &U.Name, &U.Email, &U.Country, &U.IP, &U.Created_date, &US.Timestamp, &US.Created_date)
    checkErr(err)

    userid_string := strconv.Itoa(U.Id)
    user := []string{userid_string, U.Hash, U.Name, U.Email, U.Country, U.IP, U.Created_date, US.Timestamp, US.Created_date}
    // -------------
    // ^ this is where the error occurs
    // cannot use U.Created_date (type time.Time) as type string in array element (for US.Created_date and US.Timestamp aswell)
    // -------------

    usersArray = append(usersArray, user)
    log.Print("usersArray: ", usersArray)
}

ÉDITER

J'ai ajouté ce qui suit. Cela fonctionne maintenant, merci.

userCreatedDate := U.Created_date.Format("2006-01-02 15:04:05")
userSessionCreatedDate := US.Created_date.Format("2006-01-02 15:04:05")
userSessionTimestamp := US.Timestamp.Format("2006-01-02 15:04:05")
UN D
la source
Il vaut la peine de souligner le fait que l'erreur du compilateur décrit complètement l'erreur. Vous ne pouvez pas mettre un type Time dans un tableau de chaînes.
Ben Campbell
Copie
Oleksandr Savchenko

Réponses:

160

Vous pouvez utiliser la Time.String()méthode pour convertir untime.Time en un string. Cela utilise la chaîne de format"2006-01-02 15:04:05.999999999 -0700 MST" .

Si vous avez besoin d'un autre format personnalisé, vous pouvez utiliser Time.Format() . Par exemple, pour obtenir l'horodatage au format, yyyy-MM-dd HH:mm:ssutilisez la chaîne de format "2006-01-02 15:04:05".

Exemple:

t := time.Now()
fmt.Println(t.String())
fmt.Println(t.Format("2006-01-02 15:04:05"))

Sortie (essayez-le sur le Go Playground ):

2009-11-10 23:00:00 +0000 UTC
2009-11-10 23:00:00

Remarque: l'heure sur le Go Playground est toujours définie sur la valeur indiquée ci-dessus. Exécutez-le localement pour voir la date / heure actuelle.

Notez également qu'en utilisant Time.Format(), comme mise en page, stringvous devez toujours passer le même temps - appelé l'heure de référence - formaté de la manière dont vous voulez que le résultat soit formaté. Ceci est documenté à Time.Format():

Format renvoie une représentation textuelle de la valeur de temps formatée selon la mise en page, qui définit le format en montrant comment l'heure de référence, définie comme

Mon Jan 2 15:04:05 -0700 MST 2006

serait affiché si c'était la valeur; il sert d'exemple de la sortie souhaitée. Les mêmes règles d'affichage seront alors appliquées à la valeur de temps.

icza
la source
21
Juste pour être clair. Afin de passer un format d'heure personnalisé, vous devez utiliser la valeur d'heure Mon Jan 2 15:04:05 -0700 MST 2006et mettre cette heure dans le format de votre choix. Go comprendra le format si vous l'avez passé avec cette valeur. Vous ne pouvez utiliser aucune autre valeur de temps. Il m'a fallu un certain temps pour comprendre cela et j'ai pensé à l'ajouter en commentaire
Ahmed Essam
@AhmedEssam Merci, inclus cela dans la réponse.
icza
20
package main                                                                                                                                                           

import (
    "fmt"
    "time"
)

// @link https://golang.org/pkg/time/

func main() {

    //caution : format string is `2006-01-02 15:04:05.000000000`
    current := time.Now()

    fmt.Println("origin : ", current.String())
    // origin :  2016-09-02 15:53:07.159994437 +0800 CST

    fmt.Println("mm-dd-yyyy : ", current.Format("01-02-2006"))
    // mm-dd-yyyy :  09-02-2016

    fmt.Println("yyyy-mm-dd : ", current.Format("2006-01-02"))
    // yyyy-mm-dd :  2016-09-02

    // separated by .
    fmt.Println("yyyy.mm.dd : ", current.Format("2006.01.02"))
    // yyyy.mm.dd :  2016.09.02

    fmt.Println("yyyy-mm-dd HH:mm:ss : ", current.Format("2006-01-02 15:04:05"))
    // yyyy-mm-dd HH:mm:ss :  2016-09-02 15:53:07

    // StampMicro
    fmt.Println("yyyy-mm-dd HH:mm:ss: ", current.Format("2006-01-02 15:04:05.000000"))
    // yyyy-mm-dd HH:mm:ss:  2016-09-02 15:53:07.159994

    //StampNano
    fmt.Println("yyyy-mm-dd HH:mm:ss: ", current.Format("2006-01-02 15:04:05.000000000"))
    // yyyy-mm-dd HH:mm:ss:  2016-09-02 15:53:07.159994437
}    
Hao
la source
1
Quand j'essaye fmt.Println (time.Now (). Format ("2017/20/01 13:53:35")) Je deviens étrange 21017/210/01 112: 3012: 1230
irom
3
utilisez fmt.Println (time.Now (). Format ("2006/01/02 15:04:05")), car la chaîne de format est fixe, c'est "2006 01 02 15 04 05"
Hao
2

Allez Playground http://play.golang.org/p/DN5Py5MxaB

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Now()
    // The Time type implements the Stringer interface -- it
    // has a String() method which gets called automatically by
    // functions like Printf().
    fmt.Printf("%s\n", t)

    // See the Constants section for more formats
    // http://golang.org/pkg/time/#Time.Format
    formatedTime := t.Format(time.RFC1123)
    fmt.Println(formatedTime)
}
firebitsbr
la source
Quand j'essaye fmt.Println (time.Now (). Format ("2017/20/01 13:53:35")), je deviens étrange 21017/210/01 112: 3012: 1230
irom
parce que vous faites 20 ce qui n'est pas significatif pour aller donc 2 est la date qui était probablement 21 à ce moment-là et le 0 supplémentaire est juste ajouté @irom
nikoss
1

Veuillez trouver la solution simple pour convoquer le format date et heure dans Go Lang. Veuillez trouver l'exemple ci-dessous.

Lien du package: https://github.com/vigneshuvi/GoDateFormat .

Veuillez trouver les plackholders: https://medium.com/@Martynas/formatting-date-and-time-in-golang-5816112bf098

package main


// Import Package
import (
    "fmt"
    "time"
    "github.com/vigneshuvi/GoDateFormat"
)

func main() {
    fmt.Println("Go Date Format(Today - 'yyyy-MM-dd HH:mm:ss Z'): ", GetToday(GoDateFormat.ConvertFormat("yyyy-MM-dd HH:mm:ss Z")))
    fmt.Println("Go Date Format(Today - 'yyyy-MMM-dd'): ", GetToday(GoDateFormat.ConvertFormat("yyyy-MMM-dd")))
    fmt.Println("Go Time Format(NOW - 'HH:MM:SS'): ", GetToday(GoDateFormat.ConvertFormat("HH:MM:SS")))
    fmt.Println("Go Time Format(NOW - 'HH:MM:SS tt'): ", GetToday(GoDateFormat.ConvertFormat("HH:MM:SS tt")))
}

func GetToday(format string) (todayString string){
    today := time.Now()
    todayString = today.Format(format);
    return
}
Vignesh Kumar
la source
1
strconv.Itoa(int(time.Now().Unix()))
feuyeux
la source