c# - 我可以对 Azure Cosmos 中的 DateTimeOffset 序列化对象使用 DateTimePart 函数吗?
问题描述
我正在尝试使用 DateTimePart 函数对我的 Cosmos 数据库执行查询:
SELECT c.callTime,c.id,c.source,DateTimePart('m', c.callTime) as month FROM c where c.ownerId='3467nm6df'
但是在该查询的结果中,我在“月份”字段中什么也没有:
{
"callTime": "2020-09-30T20:17:28+00:00",
"id": "352hyKL5agNtB4ic",
"source": "five9"
}
我的 cosmos 数据库中的文档结构如下:
public class CallIndex
{
public string id;
public DateTimeOffset callTime;
public string source;
}
一些示例数据如下所示:
{
"callTime": "2020-09-30T20:17:32+00:00",
"id": "352WMvL5agNwiU7u",
"source": "five9"
},
{
"callTime": "2020-09-30T20:17:28+00:00",
"id": "352hyKL5agNtB4ic",
"source": "five9"
},
{
"callTime": "2020-09-30T20:16:51+00:00",
"id": "352iS3L5agN4yAog",
"source": "five9"
}
在进行一些研究时,我发现有关DateTimeOffset
Azure Csosmos 中的类型支持的相互矛盾的信息。在一些文章中,指出 Cosmos 支持DateTimeOffset
. 在其他文章中,指出 Cosmos 不支持DateTimeOffset
,我应该DateTime
改用。
我们已经DateTimeOffset
在代码中使用了很多东西。在我们尝试上述查询之前,它实际上运行良好。我们以 UTC 存储所有内容,并且我们使用DateTimeOffset
in 代码能够轻松地转换为报告中的客户端时区。所以我的问题是,2020-09-30T20:16:51+00:00
函数是否支持格式(带偏移量的 ISO 日期时间)DateTimePart
?或者DateTimePart
仅适用于这样的格式:2020-09-30T20:16:51.000000Z
(ISO DateTime 格式)?
如果后者为真,那么我们需要将所有现有数据转换为 ISO 8061 DateTime 格式,而不是带偏移量的 ISO 8061 DateTime 格式。如果我们最终这样做,我如何告诉 Newtonsoft 如何将 DateTimeOffset 对象呈现为 ISO 8061 DateTime(无偏移)?
解决方案
是的。Azure Cosmos DB 中日期时间字符串的推荐格式是 yyyy-MM-ddTHH:mm:ss.fffffffZ,它遵循ISO 8601 UTC标准。您上面显示的格式不适用于查询中的 DateTime 系统函数。
推荐阅读
- google-chrome - WebRTC 自动授予对用户媒体的访问权限
- html - 将带有悬停图像的圆圈放置在特定位置
- c# - 参考没有特定版本号的 .net 参考
- sql - 合并表中的两行 - 相同的数据,期望一个空字段
- ios - UIButton 使屏幕动画化但停止工作 - SWIFT
- mqtt - 使用 Eclipse paho 的 2 路 ssl
- c# - C# WPF Windows 10 (1803) TouchKeyboard 不可靠问题(Prism ClickOnce)
- angular5 - 如何从内部状态中选择
- ios - IOS/Swift/Bluemix:将 curl 请求转换为 IBM Watson 到 Swift 中的 AlamoFire 请求
- apache-camel - 服务器模式下的 Apache Camel netty4 生产者