我正在使用Go运行时将实体存储在按添加时间排序的Appengine数据存储区中;将时间戳存储在密钥中我使用time.Time.String()方法格式化时间戳并将字符串版本存储为密钥。
为了在检索时再次获得时间,我使用time.Parse:
time.Parse("2006-01-02 15:04:05.000000000 +0000 UTC", the_timestamp)
在单元测试中,该功能独立于应用程序(使用cmdline - goapp测试),我的测试完整地检索时间戳没问题。
但是当我将这个包导入到appengine应用程序并测试它(使用cmdline - goapp serve)时,时间戳存储时其Year字段设置为“0000”
答案 0 :(得分:3)
在保存到数据存储区之前将时间转换为字符串时,将删除时间结束时的额外0。 所以,
2009-11-10 23:00:00.12300000 +0000 UTC
转换为
2009-11-10 23:00:00.123 +0000 UTC
现在,当您从数据存储区检索它并使用Parse函数时,它会尝试在小数点后最多匹配8位数。因此错误。
因此,在将时间转换为字符串时,您需要格式化字符串,以便0不会丢失。
const layout = "2006-01-02 15:04:05.000000000 +0000 UTC"
t := time.Now()
tFormat := t.Format(layout)