英文:
Convert Unix epoch as a string to time.Time on Go
问题
可以使用Go语言的time包将字符串形式的Unix Epoch日期转换为Go的time.Time类型。你可以使用time.Parse函数来实现这个转换。下面是一个示例代码:
package main
import (
"fmt"
"time"
)
func main() {
str := "1490846400"
epoch, err := time.Parse("20060102", str)
if err != nil {
fmt.Println("日期解析错误:", err)
return
}
fmt.Println(epoch)
}
在上面的代码中,我们使用time.Parse函数将字符串"1490846400"解析为一个time.Time类型的值。解析时,我们使用了一个格式字符串"20060102",它指定了Unix Epoch日期的格式。在这个格式字符串中,"2006"表示年份,"01"表示月份,"02"表示日期。通过将字符串解析为time.Time类型,我们可以对日期进行各种操作和格式化。
请注意,上述代码中的时间解析结果将会是UTC时间。如果你需要将其转换为其他时区的时间,可以使用time.Time类型的In方法。例如,如果你想将时间转换为北京时间,可以使用epoch.In(time.FixedZone("CST", 8*60*60))
。
希望对你有帮助!如果你有其他问题,请随时提问。
英文:
I'm reading a JSON file that contains Unix Epoch dates, but they are strings in the JSON. In Go, can I convert a string in the form "1490846400" into a Go time.Time?
答案1
得分: 13
在time
包中没有这样的函数,但是很容易编写一个:
func stringToTime(s string) (time.Time, error) {
sec, err := strconv.ParseInt(s, 10, 64)
if err != nil {
return time.Time{}, err
}
return time.Unix(sec, 0), nil
}
Playground: https://play.golang.org/p/2h0Vd7plgk。
英文:
There is no such function in time
package, but it's easy to write:
func stringToTime(s string) (time.Time, error) {
sec, err := strconv.ParseInt(s, 10, 64)
if err != nil {
return time.Time{}, err
}
return time.Unix(sec, 0), nil
}
Playground: https://play.golang.org/p/2h0Vd7plgk.
答案2
得分: 7
这里没有任何问题或错误,@Ainar-G提供的答案是正确的,但更好的方法是使用自定义的JSON解析器:
type EpochTime time.Time
func (et *EpochTime) UnmarshalJSON(data []byte) error {
t := strings.Trim(string(data), `"`) // 从JSON字符串中去除引号
sec, err := strconv.ParseInt(t, 10, 64)
if err != nil {
return err
}
epochTime := time.Unix(sec, 0)
*et = EpochTime(epochTime)
return nil
}
type SomeDocument struct {
Timestamp EpochTime `json:"time"`
// 其他字段
}
在你的结构体中,用EpochTime
替换time.Time
。
英文:
There's nothing wrong, or incorrect about the answer provided by @Ainar-G, but likely a better way to do this is with a custom JSON unmarshaler:
type EpochTime time.Time
func (et *EpochTime) UnmarshalJSON(data []byte) error {
t := strings.Trim(string(data), `"`) // Remove quote marks from around the JSON string
sec, err := strconv.ParseInt(t, 10, 64)
if err != nil {
return err
}
epochTime := time.Unix(sec,0)
*et = EpochTime(epochTime)
return nil
}
Then in your struct, replace time.Time
with EpochTime
:
type SomeDocument struct {
Timestamp EpochTime `json:"time"`
// other fields
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论