首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以将DateTimeOffset对象配置为在ISO8061for Azure Cosmos中呈现吗?

我可以将DateTimeOffset对象配置为在ISO8061for Azure Cosmos中呈现吗?
EN

Stack Overflow用户
提问于 2020-10-01 07:55:57
回答 1查看 150关注 0票数 0

我有一个保存到Azure Cosmos的文档结构,如下所示:

代码语言:javascript
复制
public class CallIndex
{
    public string id;
    public DateTimeOffset callTime;
    public string source;
}

当我保存文档时,我使用以下命令,数据如下:

代码语言:javascript
复制
container.CreateItemAsync(obj, new PartitionKey(partitionKey));
/* 
data:
{
    "callTime": "2020-09-30T20:17:28+00:00",
    "id": "352hyKL5agNtB4ic",
    "source": "five9"
}
*/

这工作得很好,但经过一些研究后,我意识到我们需要使用ISO8061 DateTime标准(没有偏移量)来执行一些服务器端查询。有没有办法强制CreateItemAsync函数以标准ISO8061格式序列化DateTimeOffset对象?在保存之前,我的所有callTime对象都已转换为UTC。在从数据库查询数据之后,我们使用DateTimeOffset使转换为客户机时区变得更简单。我希望我的数据在创建/替换后如下所示:

代码语言:javascript
复制
{
    "callTime": "2020-09-30T20:17:28.000000Z",
    "id": "352hyKL5agNtB4ic",
    "source": "five9"
}

这有可能吗?或者我最好改变我的结构,使用DateTime而不是DateTimeOffset

EN

回答 1

Stack Overflow用户

发布于 2020-10-01 09:18:48

由于这反映了JSON序列化程序的默认行为,因此您需要通过向Cosmos客户端提供您自己的custom serializer来覆盖它。实现该格式将取决于序列化程序。

我发现有很好的理由而不是来解决这个问题;使用DateTime来代替,总是使用UTC值,并且可以选择与时间适用的位置的IANA time zone名称一起使用。这保证了序列化正常工作,Cosmos喜欢它,并且能够在服务器和客户端的特定时区内正确处理datetime算法(NodaTime和date-fns库在这里有帮助)。

还要注意,DateTimeOffset在时区模糊性方面有一个基本限制:

因为单个DateTimeOffset值与其时区没有紧密耦合,所以它不能反映时区与夏令时之间的转换。当使用日期和时间算法来操作DateTimeOffset值时,这可能是有问题的。

Source

在我看来,如果你关心你的应用程序中的时区,最好避开DateTimeOffset

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64147313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档