回答

收藏

将 time.Time 转换为字符串

技术问答 技术问答 334 人阅读 | 0 人回复 | 2023-09-12

我试图在[]中添加我数据库中的一些值stringGo 中。有些是时间戳。
3 D( j& X9 o8 `& \我收到了错误:
) X/ S, M  I* D! F不能使用 U.Created_date (type time.Time) 作为数组元素中的类型字符串
( d1 D: v/ g: @. n
我可以转换time.Time为string吗?6 N$ \: R8 K) G
    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}9 |; a$ s2 i/ d0 y, Z
——6 m+ u  Q" O/ ~/ m' D. ~
    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)}
    % M2 u# R. x- P% O/ c7 b$ {$ r
编辑
. m2 p+ w2 q& R' S我添加了以下内容。现在可以用了,谢谢。
2 Y& r* o4 d2 {4 ]) x
    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")
    / p: s6 h( @0 ~+ _6 x- a
               , ^; q8 ^  x7 }
    解决方案:                                                                1 Q4 U& P2 p: J) d; ?
                                                                你可以用这个Time.String()方法将 a 转换time.Time为 a string。使用格式字符串"2006-01-02 15:04:05.999999999 -0700 MST"。4 Z3 {5 z  Z0 B$ E( G
如果需要其他自定义格式,可以使用Time.Format(). 例如,以yyyy-MM-dd HH:mm:ss使用格式字符串的格式获取时间戳"2006-01-02 15:04:05"。5 P! a' }% e0 i  T0 a
例子:
. k+ S( b; ^1 i4 Q/ `! c
    t := time.Now()fmt.Println(t.String())fmt.Println(t.Format("2006-01-02 15:04:05"))3 D+ \* B5 I, [" o& s+ N
输出(在Go Playground上试试):
- |: M4 T$ E0 H7 ?' `( R
    2009-11-10 23:00UTC2009-11-10 23:00:005 z7 H3 U8 F3 b7 b8 C9 G( W, M
注意:Go Playground 上述时间始终设置为上述值。在本地运行,查看当前日期/时间。
, C4 B" h9 h$ e0 I% M8 V! H2 o请注意,使用Time.Format(),作为布局,string你必须一直传递同样的时间 - 称为参考时间 - 以你想要格式化结果的方式格式化。这是记录在内的Time.Format():
# r) B( M1 A! t6 G" W' f8 AFormat 根据布局格式化的时间值,通过显示如何定义参考时间来定义格式
( @/ I: O! e* }golangMon Jan 2 15:04:05 -0700 MST 2006
0 P+ _( D$ G- t如果是值,则会显示;它被用作所需输出的示例。然后在时间值中应用相同的显示规则。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则