使用Go的time.Now()存储到MongoDB后解析日期报错求助
问题分析与解决
核心问题
你做了完全冗余的操作:blog.CreatedAt本身已经是Go的time.Time类型(MongoDB驱动会自动把存储的Date类型映射为time.Time),但你偏要调用它的String()方法转成字符串,再用time.Parse解析回time.Time。而time.Time.String()输出的格式是"2006-01-02 15:04:05.000 MST",和你指定的time.RFC3339格式(带T分隔符)不匹配,这就是报错的直接原因。
直接解决方案
删掉多余的解析步骤,直接用原始的time.Time值构造timestamppb对象:
tempBlog := &api.Blog{ Id: blog.ID, CreatedAt: timestamppb.New(blog.CreatedAt), UpdatedAt: timestamppb.New(blog.UpdatedAt), }
为什么之前的尝试都失败?
time包的格式常量(比如RFC1123、RFC3339等)没有完全匹配time.Time.String()输出的格式,所以你换任何常量都会出现解析错误——本质是你根本不需要做“字符串转时间”这个操作。
额外提醒
如果你的blog.CreatedAt不是time.Time类型(比如驱动配置问题导致返回字符串),那你需要先检查MongoDB驱动的映射配置,确保日期字段正确映射为time.Time,而非手动解析字符串。
内容的提问来源于stack exchange,提问作者Mike3355
相关产品推荐
相关产品推荐

