Zamanı dönüştür, zamanı dizeye


111

Veritabanımdan Go'daki a'ya bazı değerler eklemeye çalışıyorum []string. Bunlardan bazıları zaman damgalarıdır.

Şu hatayı alıyorum:

dizi öğesinde tür dizesi olarak U.Created_date (type time.Time) kullanılamaz

Ben dönüştürebilir miyim time.Timehiç 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)
}

DÜZENLE

Aşağıdakileri ekledim. Şimdi çalışıyor, teşekkürler.

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")

Derleyici hatasının hatayı tamamen tanımladığı gerçeğinin altını çizmeye değer. Bir dizi dizisine Time türü koyamazsınız.
Ben Campbell


Önerilerin bazılarını işe yarayamadım, time.Now().String()şimdilik kullandım
Mark Robson

Yanıtlar:


170

Sen kullanabilirsiniz Time.String()bir dönüştürme yöntemi time.Timea string. Bu, biçim dizesini kullanır "2006-01-02 15:04:05.999999999 -0700 MST".

Başka bir özel biçime ihtiyacınız varsa, kullanabilirsiniz Time.Format(). Örneğin, zaman damgasını yyyy-MM-dd HH:mm:ssbiçim dizesini kullanma biçiminde almak için "2006-01-02 15:04:05".

Misal:

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

Çıktı ( Go Playground'da deneyin ):

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

Not: Go Oyun Alanındaki zaman her zaman yukarıda görülen değere ayarlanır. Geçerli tarihi / saati görmek için yerel olarak çalıştırın.

Ayrıca Time.Format(), düzeni kullandığınızda , sonucun biçimlendirilmesini istediğiniz şekilde biçimlendirilmiş olarak her zaman stringaynı zamanı ( referans zamanı denilen) geçmeniz gerektiğini unutmayın. Bu, şu adreste belgelenmiştir Time.Format():

Biçim, düzene göre biçimlendirilmiş zaman değerinin metinsel bir temsilini döndürür; bu, biçimi referans zamanın nasıl tanımlandığını göstererek tanımlayarak

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

değer olsaydı görüntülenirdi; istenen çıktının bir örneği olarak hizmet eder. Aynı görüntüleme kuralları daha sonra zaman değerine uygulanacaktır.


21
Sadece açıklığa kavuşturmak için. Özel bir saat formatını geçmek için, zaman değerini kullanmanız Mon Jan 2 15:04:05 -0700 MST 2006ve bu saati istediğiniz formatta koymanız gerekir. Bu değerle geçerseniz, git formatı anlayacaktır. Başka bir zaman değeri kullanamazsınız. Bunu anlamam biraz zaman aldı ve yorum olarak eklemeyi düşündüm
Ahmed Essam

@AhmedEssam Teşekkürler, cevaba ekledik.
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
}    

1
Fmt.Println (time.Now (). Format ("2017/20/01 13:53:35")) denediğimde garipleşiyorum 21017/210/01 112: 3012: 1230
irom

3
fmt.Println (time.Now (). Format ("2006/01/02 15:04:05")) kullanın, çünkü biçim dizesi sabittir, "2006 01 02 15 04 05"
Hao

2

Oyun Alanına Git 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)
}

Fmt.Println (time.Now (). Format ("2017/20/01 13:53:35")) denediğimde garipleşiyorum 21017/210/01 112: 3012: 1230
irom

çünkü 20'yi yaparsın ki bu gitmek için anlamlı değil, bu yüzden 2 muhtemelen o sırada 21 olan tarih ve fazladan 0 sadece @irom
nikoss

1

Lütfen Go Lang'de Tarih ve Saat Biçimini anlatmak için basit çözümü bulun. Lütfen aşağıdaki örneği bulun.

Paket Bağlantısı: https://github.com/vigneshuvi/GoDateFormat .

Lütfen doldurucuları bulun: 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
}

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.