У меня есть код, написанный на Go, который я пытаюсь обновить для работы с последними еженедельными сборками. (Последний раз строился под r60). Теперь все работает, кроме следующего бита:
if t, _, err := os.Time(); err == nil {
port[5] = int32(t)
}
Есть какие-нибудь советы о том, как обновить это для работы с текущей реализацией Go?
Unix()
возвращаемое значение имеет типint64
. Усечениеint64
значения типа для вводаint32
является примером проблемы 2038 года .Если вы хотите, чтобы это было
string
просто преобразовать его черезstrconv
:package main import ( "fmt" "strconv" "time" ) func main() { timestamp := strconv.FormatInt(time.Now().UTC().UnixNano(), 10) fmt.Println(timestamp) // prints: 1436773875771421417 }
источник
Еще один совет.
time.Now().UnixNano()
(godoc) даст вам наносекунды с эпохи. Это не строго время Unix, но оно дает вам точность менее секунды, используя ту же эпоху, что может быть удобно.Изменить: изменено, чтобы соответствовать текущему api golang
источник
time.Now().UnixNano()
( ссылка ) работает.Основываясь на идее из другого ответа здесь, чтобы получить удобочитаемую интерпретацию, вы можете использовать:
package main import ( "fmt" "time" ) func main() { timestamp := time.Unix(time.Now().Unix(), 0) fmt.Printf("%v", timestamp) // prints: 2009-11-10 23:00:00 +0000 UTC }
Попробуйте это на игровой площадке Go .
источник