1. ホーム
  2. string

[解決済み] time.Timeを文字列に変換する

2022-03-07 21:11:37

質問

データベースからいくつかの値を []string をGoで実行します。そのうちのいくつかは、タイムスタンプです。

エラーが出ます。

U.Created_date (type time.Time) を文字列として配列要素で使用することはできません。

を変換することはできますか? time.Time から 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

を追加しました。これで動作するようになりました、ありがとうございます。

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

解決方法は?

を使用することができます。 Time.String() メソッドを使用して time.Time string . これは、フォーマット文字列 "2006-01-02 15:04:05.999999999 -0700 MST" .

他のカスタムフォーマットが必要な場合は Time.Format() . 例えば、タイムスタンプを次のような形式で取得します。 yyyy-MM-dd HH:mm:ss というフォーマット文字列を使用します。 "2006-01-02 15:04:05" .

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

出力(で試してみてください。 囲碁プレイグラウンド ):

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

注:Go Playground の時刻は常に上記の値に設定されています。ローカルで実行すると、現在の日付/時刻が表示されます。

また Time.Format() として、レイアウト string と呼ばれる、同じ時間を渡す必要があります。 参照 time-formatted in the way you want to be formatted in the result. これは Time.Format() :

Formatは、レイアウトに従ってフォーマットされた時間値のテキスト表現を返す。レイアウトは、次のように定義された参照時間を示すことによってフォーマットを定義する。

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

は値として表示されます。同じ表示規則が時間値にも適用される。