我在我的应用程序中使用 C# 对象持久性模型,并从外部源填充表。我插入一行具有以下日期(在字符串列中):2018-12-12T22:27:14.73Z
。这是使用以下 Go 代码从时间戳生成的:
&dynamodb.AttributeValue{S: aws.String(entity.TimeStamp.UTC().Format("2006-01-02T15:04:05.999Z"))}
但是,当尝试将 DynamoDB 对象持久性模型转换为 System.DateTime
时出现以下错误:System.InvalidOperationException:无法转换 [2018-12-12T22 :27:14.73Z] 类型的 Amazon.DynamoDBv2.DocumentModel.Primitive 到 System.DateTime
如果我让我的服务写入 System.DateTime(使用包含 DateTime 属性的 POCO),它看起来像这样:2018-12-19T07:45:36.431Z
。我缺少什么阻止 AWS 正确反序列化我的日期?看起来我写的格式和亚马逊写的格式一样?
最佳答案
好的,我找到了答案。 DynamoDB 期望该列始终在时间戳的小数部分具有 3 位精度。当我从 Golang 格式化时间时,我使用 "2006-01-02T15:04:05.999Z"
作为我的格式字符串,但这会导致 time.Format
截断尾随零(当它们存在时)。将我的时间格式字符串更改为始终打印完整的精度,我能够解决我的问题。
也就是说,文档可以更清楚地说明此精度要求。或者异常(exception)可以更明确一点。希望这个问题/答案能让该异常在 Google 上搜索到!
关于c# - DynamoDB 无法转换为 System.DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53847113/