问题描述
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"),"2020-08-25T12:01:01.11Z"),"2020-08-25T12:01:01.111Z"),"2020-08-25T12:01:01.1111Z"),"2020-08-25T12:01:01.11111Z"),"2020-08-25T12:01:01.111111Z"),"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将正确地将日期时间序列化为7位小数秒,而不是在最后一位为零时截断为6位?就我而言,我只是存储DateTime.UtcNow
的结果,有些值以6位数的分数秒结尾。
解决方法
如果我正确理解了您的问题,则可以尝试以下操作:
SELECT TOP 1
left( "2020-08-25T12:01:01Z",4),left( "2020-08-25T12:01:01.1Z",left( "2020-08-25T12:01:01.11Z",left( "2020-08-25T12:01:01.111Z",left( "2020-08-25T12:01:01.1111Z",left( "2020-08-25T12:01:01.11111Z",left( "2020-08-25T12:01:01.111111Z",left( "2020-08-25T12:01:01.1111111Z",4)
如果要确保7位数字,可以将属性类型更改为字符串并使用以下代码:
DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss:fffffffZ")