Golang - 格式化和存储后丢失年份的时间戳

时间:2014-09-01 07:48:28

标签: google-app-engine go datetime-format

我正在使用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”

1 个答案:

答案 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)

http://play.golang.org/p/elr28mfMo8