Почему я не могу преобразовать время эпохи в строку?

#go

#Вперед

Вопрос:

У меня есть следующая программа:

 package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now().UnixNano() / int64(time.Millisecond)
    nowString := string(now)
    fmt.Println(nowString)
}
  

Я ожидаю, что время эпохи будет напечатано в виде строки. Вместо этого я получаю:

 

Как мне исправить эту ошибку?

Комментарии:

1. Преобразование в строку не может быть выполнено с помощью string (сейчас). Совершите экскурсию по Go. Используйте fmt.Sprintf для преобразования чисел в строки или используйте time.Time. Формат.

2. Ответы на большинство основных вопросов даны в рамках экскурсии по Go , которая займет всего несколько минут.

Ответ №1:

main.go

 package main

import "fmt"
import "time"

func main() {
    nanos := time.Now().UnixNano()
    fmt.Println(time.Unix(0, nanos))

    millis := nanos / 1000000
    fmt.Println(millis)
}
  

Ответ №2:

Вы выполняете много вычислений, которые не нужны, если вы используете time функции, как показано здесь на примере — https://gobyexample.com/time-formatting-parsing

Также. если все, что вам нужно сделать, это напечатать целое число, вам не нужно преобразовывать его в строку, а просто использовать спецификатор формата, например:

 func main() {
    now := time.Now().UnixNano() / int64(time.Millisecond)
    //now is an int64 as you may have observed
    fmt.Printf("%d", now)
    //or even fmt.Println(now)
}
  

Ответ №3:

Взгляните на strconv.

Пакет strconv реализует преобразования в строковые представления базовых типов данных и из них.

В вашем случае для преобразования числа int64 в строку может потребоваться использовать FormatInt, как показано ниже:

функция FormatInt (i int64, базовый int) string

FormatInt возвращает строковое представление i в заданной базе, для 2 <= base <= 36. В результате используются строчные буквы от ‘a’ до ‘z’ для цифровых значений > = 10.

 convertedString := strconv.FormatInt(YOUR_NUMBER, 10)
  

И вот пример эпохи (https://gobyexample.com/epoch ), используя пакет time:

 func main() {

    now := time.Now()
    secs := now.Unix()
    nanos := now.UnixNano()
    fmt.Println(now)

    millis := nanos / 1000000
    fmt.Println(secs)
    fmt.Println(millis)
    fmt.Println(nanos)

    fmt.Println(time.Unix(secs, 0))
    fmt.Println(time.Unix(0, nanos))
}
  

вывод:

 $ go run epoch.go 
2012-10-31 16:13:58.292387  0000 UTC
1351700038
1351700038292
1351700038292387000
2012-10-31 16:13:58  0000 UTC
2012-10-31 16:13:58.292387  0000 UTC