Cosmos DB DateTimePart无法解析某些日期

时间:2020-08-27 00:58:26

标签: azure-cosmosdb azure-cosmosdb-sqlapi

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将正确地将日期时间序列化为7位小数秒,而不是在最后一位为零时截断为6位?就我而言,我只是存储DateTime.UtcNow的结果,有些值以6位数的分数秒结尾。

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,则可以尝试以下操作:

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")