azure-cosmosdb - Cosmos DB DateTimePart 不解析某些日期
问题描述
Cosmos DB 似乎无法解析带有 6 位小数秒的日期,例如2020-08-25T10:00:14.634466Z
.
此外,我发现了一个有趣的模式:
SELECT TOP 1
DateTimePart("yyyy", "2020-08-25T12:01:01Z"),
DateTimePart("yyyy", "2020-08-25T12:01:01.1Z"),
DateTimePart("yyyy", "2020-08-25T12:01:01.11Z"),
DateTimePart("yyyy", "2020-08-25T12:01:01.111Z"),
DateTimePart("yyyy", "2020-08-25T12:01:01.1111Z"),
DateTimePart("yyyy", "2020-08-25T12:01:01.11111Z"),
DateTimePart("yyyy", "2020-08-25T12:01:01.111111Z"),
DateTimePart("yyyy", "2020-08-25T12:01:01.1111111Z")
FROM c
结果:
[
{
"$1": 2020,
"$4": 2020,
"$8": 2020
}
]
甚至可以正确解析年份的唯一组合具有 0、3 和 7 位小数秒。
Cosmos DB DateTimePart的文档似乎确实假设了 7 位小数秒,但我也没想到它在四舍五入时无法解析。
没有先截断字符串以消除小数秒,有没有更好的方法来解决这个问题?此外,有没有办法确保 Cosmos SDK for .NET 正确序列化 DateTimes 的 7 位小数秒,而不是在最后一位为 0 时截断为 6 位?就我而言,我只是存储 的结果DateTime.UtcNow
,并且一些值以 6 位小数秒结尾。
解决方案
如果我正确理解你的问题,你可以试试这个:
SELECT TOP 1
left( "2020-08-25T12:01:01Z",4),
left( "2020-08-25T12:01:01.1Z",4),
left( "2020-08-25T12:01:01.11Z",4),
left( "2020-08-25T12:01:01.111Z",4),
left( "2020-08-25T12:01:01.1111Z",4),
left( "2020-08-25T12:01:01.11111Z",4),
left( "2020-08-25T12:01:01.111111Z",4),
left( "2020-08-25T12:01:01.1111111Z",4)
如果要确保 7 位数字,可以将属性类型更改为字符串并使用以下代码:
DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss:fffffffZ")
推荐阅读
- flutter - 如何让 AppBar 从顶部滑动并覆盖屏幕内容,就像 inshorts 应用栏一样
- swift - Xcode - 伞框架 - 缺少模块
- r - 多元回归预测区间误差
- css - 在 DIV 中定位元素
- docker - 烧瓶开发服务器的 nginx proxy_pass 连接被拒绝
- reactjs - 元标签反应js
- java - 如何在 RecyclerView 中添加 FloatingActionButton
- android - Android-Studio:如何使资源字符串值与其名称相同
- apache-kafka - 使用 selectKey 和 transform 对 DSL 拓扑进行流重新分区
- linux - 如何在 Linux 上的 .NetCore 中捕获双页错误(内存映射文件读取错误)?