Chuyển đổi time.Time thành chuỗi


103

Tôi đang cố gắng thêm một số giá trị từ cơ sở dữ liệu của mình vào một []stringtrong Go. Một số trong số này là dấu thời gian.

Tôi gặp lỗi:

không thể sử dụng U.Cided_date (kiểu time.Time) làm kiểu chuỗi trong phần tử mảng

Tôi có thể chuyển đổi time.Timesang stringkhông?

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

BIÊN TẬP

Tôi đã thêm những điều sau đây. Nó hoạt động ngay bây giờ, cảm ơn.

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

Nó là giá trị làm nổi bật thực tế là lỗi trình biên dịch mô tả lỗi hoàn toàn. Bạn không thể đặt một kiểu Thời gian trong một mảng của một chuỗi.
Ben Campbell

Câu trả lời:


159

Bạn có thể sử dụng Time.String()phương pháp này để chuyển đổi a time.Timethành a string. Điều này sử dụng chuỗi định dạng "2006-01-02 15:04:05.999999999 -0700 MST".

Nếu bạn cần định dạng tùy chỉnh khác, bạn có thể sử dụng Time.Format(). Ví dụ để lấy dấu thời gian ở định dạng yyyy-MM-dd HH:mm:sssử dụng chuỗi định dạng "2006-01-02 15:04:05".

Thí dụ:

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

Đầu ra (thử nó trên Go Playground ):

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

Lưu ý: thời gian trên Sân chơi cờ vây luôn được đặt thành giá trị đã thấy ở trên. Chạy nó cục bộ để xem ngày / giờ hiện tại.

Cũng lưu ý rằng việc sử dụng Time.Format(), vì bố cục stringbạn luôn phải vượt qua cùng một thời gian –được gọi là thời gian tham chiếu– được định dạng theo cách bạn muốn kết quả được định dạng. Điều này được ghi lại tại Time.Format():

Định dạng trả về biểu diễn dạng văn bản của giá trị thời gian được định dạng theo bố cục, định dạng này xác định định dạng bằng cách hiển thị thời gian tham chiếu, được xác định như thế nào

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

sẽ được hiển thị nếu đó là giá trị; nó phục vụ như một ví dụ về đầu ra mong muốn. Các quy tắc hiển thị tương tự sau đó sẽ được áp dụng cho giá trị thời gian.


21
Chỉ để làm cho rõ ràng. Để vượt qua định dạng thời gian tùy chỉnh, bạn phải sử dụng giá trị thời gian Mon Jan 2 15:04:05 -0700 MST 2006và đặt thời gian này ở bất kỳ định dạng nào bạn muốn. Go sẽ hiểu định dạng nếu bạn chuyển nó với giá trị này. Bạn không thể sử dụng bất kỳ giá trị thời gian nào khác. Nó đã cho tôi đôi khi phải tìm ra điều này và nghĩ tới để thêm nó như là một bình luận
Ahmed Essam

@AhmedEssam Cảm ơn, đã bao gồm điều đó trong câu trả lời.
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
Khi tôi thử fmt.Println (time.Now (). Định dạng ("2017/20/01 13:53:35")) Tôi thấy lạ 21017/210/01 112: 3012: 1230
từ

3
sử dụng fmt.Println (time.Now (). Định dạng ("2006/01/02 15:04:05")), vì chuỗi định dạng đã được sửa, Đó là "2006 01 02 15 04 05"
Hao

2

Truy cập sân chơi 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)
}

Khi tôi thử fmt.Println (time.Now (). Định dạng ("2017/20/01 13:53:35")) Tôi thấy lạ 21017/210/01 112: 3012: 1230
từ

bởi vì bạn làm 20 mà không phải là có ý nghĩa cho đi quá 2 là ngày mà đã 21 có lẽ tại thời điểm đó và thêm 0 chỉ được nối @irom
nikoss

1

Vui lòng tìm giải pháp đơn giản để chuyển đổi Định dạng Ngày & Giờ trong Go Lang. Vui lòng tìm ví dụ dưới đây.

Liên kết gói: https://github.com/vigneshuvi/GoDateFormat .

Vui lòng tìm chủ nhân: 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
}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.