在编组时间时避免精度损失。时间对象

我做了一个游乐场,再现了我的问题。我有一些测试失败了,因为json Marshal方法在对象转换过程中似乎会丢失精度。time.Time


运行以下代码:


package main


import (

    "fmt"

    "encoding/json"

    "time"

)


type myStruct struct{

    Now time.Time `json:"time"`

}


func main() {

    expect := &myStruct{Now: time.Now()}

    

    fmt.Println(expect.Now.String())

    

    byteData, err := json.Marshal(expect)

    if err != nil {

        panic(err.Error())

    }

    

    actual := &myStruct{}

    err = json.Unmarshal(byteData, &actual)

    if err != nil {

        panic(err.Error())

    }

    

    fmt.Println(actual.Now.String())

}

输出:


2009-11-10 23:00:00 +0000 UTC m=+0.000000001

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

问题是,当我运行任何涉及对象转换的测试时,我无法使用任何标准方法来比较结果(作证,反映...)。time.Time


有没有办法在编组对象时保持精度,或者将时间值“舍入”到较低的精度?time.Time


元芳怎么了
浏览 120回答 2
2回答

猛跑小猪

使用 或 .这将移除您的精密零件,您可以成功测试它。expect := &myStruct{Now: time.Now().Local()}expect := &myStruct{Now: time.Now().UTC()}

繁星淼淼

也可以使用Time.Round:Round 返回 t,去掉任何单调时钟读数,但其他方面保持不变。所以:time.Now().Round(0)将剥离单调偏移,使其余时间分量保持不变(时区等)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go