英文:
Golang - Timestamp losing year after formatting and storage
问题
我正在使用Go运行时将实体存储在Appengine Datastore中,并按它们添加的时间进行排序;为了将时间戳存储在键中,我使用time.Time.String()方法格式化时间戳,并将字符串版本存储为键。
为了在检索时再次获取时间,我使用time.Parse:
time.Parse("2006-01-02 15:04:05.000000000 +0000 UTC", the_timestamp)
在独立于应用程序的单元测试中(使用命令行-goapp test),我的测试可以完整地检索时间戳,没有问题。
但是,当我将执行此操作的包导入到一个appengine应用程序中并进行测试(使用命令行-goapp serve),时间戳的年份字段被设置为"0000"。
英文:
I am using the Go runtime to store entities in the Appengine Datastore sequenced by the time they were added; to store the timestamp in the key I am formatting the timestamp using the time.Time.String() method and storing the string version as the key.
To get the Time back again on retrieval I use time.Parse:
time.Parse("2006-01-02 15:04:05.000000000 +0000 UTC", the_timestamp)
In unit testing this functionality independent of an app (using cmdline - goapp test) my tests retrieve the timestamp in its entirety no problem.
But when I import the package doing this into an appengine app and test it (using cmdline - goapp serve) the timestamp is stored with its Year field set to "0000"
答案1
得分: 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
英文:
When you are converting your time to string before saving into datastore, the extra 0s at the end of time are removed.
So,
2009-11-10 23:00:00.12300000 +0000 UTC
is converted into
2009-11-10 23:00:00.123 +0000 UTC
Now when you retrieve it from datastore and use the Parse function, it tries to match upto 8 digits after decimal. Hence the error.
So, while converting the time into string, you need to Format the string so that 0s are not lost.
const layout = "2006-01-02 15:04:05.000000000 +0000 UTC"
t := time.Now()
tFormat := t.Format(layout)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论