为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
元芳怎么了 2022-08-30 21:11:41
我做了一个游乐场,再现了我的问题。我有一些测试失败了,因为json Marshal方法在对象转换过程中似乎会丢失精度。time.Time运行以下代码:package mainimport (    "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.0000000012009-11-10 23:00:00 +0000 UTC问题是,当我运行任何涉及对象转换的测试时,我无法使用任何标准方法来比较结果(作证,反映...)。time.Time有没有办法在编组对象时保持精度,或者将时间值“舍入”到较低的精度?time.Time
查看完整描述

2 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

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



查看完整回答
反对 回复 2022-08-30
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

也可以使用Time.Round

Round 返回 t,去掉任何单调时钟读数,但其他方面保持不变。

所以:

time.Now().Round(0)

将剥离单调偏移,使其余时间分量保持不变(时区等)


查看完整回答
反对 回复 2022-08-30
  • 2 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号