2014-02-08 1 views
5

В Голландии мы в основном используем ГГГГ-ММ-ДД ЧЧ: ММ: СС. Как я могу отформатировать это в Go? Все, что я вставляю (даже по стандарту), дает странные цифры.Выходное время Go в RFC3339, как формат MySQL

Это мой код (p.Created это NanoSeconds int64 объекта):

package main 

import (
    "database/sql" 
    "fmt" 
    _ "github.com/go-sql-driver/mysql" 
    "log" 
    "time" 
) 

const createdFormat = "2010-01-01 20:01:00" //"Jan 2, 2006 at 3:04pm (MST)" 

type Post struct { 
    Id  int64 
    Created int64 
    Title string 
    Body string 
} 

func main() { 
    // Establish database connection 
    dsn := "[email protected](127.0.0.1:3306)/testdb" 
    con, err := sql.Open("mysql", dsn) 
    if err != nil { 
     log.Println("Couldn't connect to databse:", err) 
    } else { 
     log.Println("DB Connection established") 
    } 
    defer con.Close() 

    // Try to get something 
    row := con.QueryRow("SELECT * FROM posts LIMIT 1") 
    p := new(Post) 
    err = row.Scan(&p.Id, &p.Created, &p.Title, &p.Body) 

    if err != nil { 
     log.Println("Failed to fetch Post") 
    } 
    fmt.Println(p) 
    fmt.Println(time.Unix(0, p.Created).Format(createdFormat)) 
} 

Я мог бы просто CONCAT time.Unix(0, p.Created).Year() и т.д., но это не очень чистые и раздражение для последовательности.

ответ

12

В вышеуказанных случаях было две ошибки. Для формата вам нужно сделать вывод, что особой даты/времени, а также параметры для time.Unix являются наоборот (playground)

const createdFormat = "2006-01-02 15:04:05" //"Jan 2, 2006 at 3:04pm (MST)" 

fmt.Println(time.Unix(1391878657, 0).Format(createdFormat)) 
+0

Это сработало, спасибо. Странно, что в docs указано 'func Unix (sec int64, nsec int64) Time' tho. Наверное, понимаем это неправильно –

+0

'sec' - количество секунд с момента; 'nsec' - это число наносекунд после' sec'. – publysher

+0

re comment - Я не уверен, что Mountain Standard Time полезно в Голландии; -P –