Ubah waktu Waktu menjadi string

105

Saya mencoba menambahkan beberapa nilai dari database saya ke a []string dalam Go. Beberapa di antaranya adalah stempel waktu.

Saya mendapatkan kesalahan:

tidak bisa menggunakan U.Created_date (type time.Time) sebagai tipe string dalam elemen array

Bisakah saya mengonversi time.Timeke 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)
}

EDIT

Saya menambahkan yang berikut ini. Ini berfungsi sekarang, terima kasih.

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")
IKLAN
sumber
Perlu disoroti fakta bahwa kesalahan kompilator mendeskripsikan kesalahan sepenuhnya. Anda tidak dapat menempatkan tipe Waktu dalam larik string.
Ben Campbell
Kemungkinan duplikat dari Bagaimana memformat waktu saat ini menggunakan format yyyyMMddHHmmss?
Oleksandr Savchenko

Jawaban:

162

Anda dapat menggunakan Time.String()metode untuk mengonversi file time.Timea menjadi string. Ini menggunakan format string "2006-01-02 15:04:05.999999999 -0700 MST".

Jika Anda membutuhkan format kustom lainnya, Anda dapat menggunakan Time.Format(). Misalnya untuk mendapatkan stempel waktu dalam format yyyy-MM-dd HH:mm:ssmenggunakan format string "2006-01-02 15:04:05".

Contoh:

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

Output (coba di Go Playground ):

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

Catatan: waktu di Go Playground selalu disetel ke nilai yang terlihat di atas. Jalankan secara lokal untuk melihat tanggal / waktu saat ini.

Juga perhatikan bahwa menggunakan Time.Format(), sebagai tata letak, stringAnda selalu harus melewatkan waktu yang sama - disebut waktu referensi - yang diformat dengan cara yang Anda inginkan untuk memformat hasil. Ini didokumentasikan di Time.Format():

Format mengembalikan representasi tekstual dari nilai waktu yang diformat sesuai dengan tata letak, yang mendefinisikan format dengan menunjukkan bagaimana waktu referensi, didefinisikan menjadi

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

akan ditampilkan jika itu adalah nilainya; ini berfungsi sebagai contoh keluaran yang diinginkan. Aturan tampilan yang sama kemudian akan diterapkan ke nilai waktu.

icza
sumber
21
Hanya untuk memperjelas. Untuk meneruskan format waktu khusus, Anda harus menggunakan nilai waktu Mon Jan 2 15:04:05 -0700 MST 2006dan meletakkan waktu ini dalam format apa pun yang Anda inginkan. Go akan memahami format jika Anda lulus dengan nilai ini. Anda tidak dapat menggunakan nilai waktu lainnya. Saya butuh waktu beberapa saat untuk mengetahuinya dan berpikir untuk menambahkannya sebagai komentar
Ahmed Essam
@AhmedEssam Terima kasih, termasuk di dalam jawaban.
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
sumber
1
Ketika saya mencoba fmt.Println (time.Now (). Format ("2017/20/01 13:53:35")) Saya menjadi aneh 21017/210/01 112: 3012: 1230
irom
3
gunakan fmt.Println (time.Now (). Format ("2006/01/02 15:04:05")), karena format string sudah diperbaiki, Ini "2006 01 02 15 04 05"
Hao
2

Buka 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
sumber
Ketika saya mencoba fmt.Println (time.Now (). Format ("2017/20/01 13:53:35")) Saya menjadi aneh 21017/210/01 112: 3012: 1230
irom
karena Anda melakukan 20 yang tidak berarti untuk pergi jadi 2 adalah tanggal yang 21 mungkin pada saat itu dan tambahan 0 hanya ditambahkan @irom
nikoss
1

Temukan solusi sederhana untuk mengubah Format Tanggal & Waktu di Go Lang. Temukan contoh di bawah ini.

Tautan Paket: https://github.com/vigneshuvi/GoDateFormat .

Silakan temukan pemiliknya: 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
sumber
1
strconv.Itoa(int(time.Now().Unix()))
feuyeux
sumber