使用 GenerateFilterConditionForDate 构建的查询将时间更改为 Azure Table 存储中的 UTC 时间
Query framed using GenerateFilterConditionForDate changes time to UTC time in Azure Table Storage
我的问题
使用 GenerateFilterConditionForDate 构造的查询将时间更改为 UTC 时间。
我做了什么
下面是使用的查询
var queryDtFrom = TableQuery.CombineFilters(filterJoin,
TableOperators.And,
TableQuery.GenerateFilterConditionForDate("TimeReceived", QueryComparisons.GreaterThanOrEqual, fromDateTimeOffset));
为frmDateTimeOffset
传递的值是{6/18/2018 5:00:00 PM}
但是框架查询 queryDtFrom
的值为
(PartitionKey eq 'D4AS3') and (TimeReceived ge datetime'2018-06-18T11:30:00.0000000Z')
此处日期值更改为2018-06-18T11:30:00.0000000Z
,而传递给TableQuery.GenerateFilterConditionForDate
的值为{6/18/2018 5:00:00 PM}
我的要求
我们如何才能使使用 GenerateFilterConditionForDate 构建的查询在结果查询中具有相同的传递日期时间
而不是更改 UTC 时间值?
任何想法,请分享。
这是 Azure 中的设计。
它提倡以 UTC 时间存储,因为它是标准时间,您可以在其中计算任何其他时区。
我们可以在调用 TableQuery.GenerateFilterConditionForDate
之前先将本地时区时间转换为 UTC 时间,如下所示:
DateTime convertedDate = DateTime.SpecifyKind(DateTime.Parse("6/18/2018 5:00:00 PM"),DateTimeKind.Utc);
正如 Gaurav Mantri 在上面评论的那样:"This is expected behavior as all the date/time type attribute values are stored in UTC"。当我们从 table:
检索 UTC 格式的日期时间时,我们还可以将 UTC 时间转换为本地时区时间
DateTime dt = convertedDate.ToLocalTime();
如评论和其他答案中所述,这是 Azure 表的默认行为。所有 date/time 值都存储为 UTC。
同样,如评论中所述,如果您希望保留 date/time 值,一种可能的解决方案是获取 date/time 值的 ticks
并将该值存储为Int64
类型属性。在查询之前,您可以获得 date/time 的刻度值并将其用于查询目的。
我的问题
使用 GenerateFilterConditionForDate 构造的查询将时间更改为 UTC 时间。
我做了什么
下面是使用的查询
var queryDtFrom = TableQuery.CombineFilters(filterJoin,
TableOperators.And,
TableQuery.GenerateFilterConditionForDate("TimeReceived", QueryComparisons.GreaterThanOrEqual, fromDateTimeOffset));
为frmDateTimeOffset
传递的值是{6/18/2018 5:00:00 PM}
但是框架查询 queryDtFrom
的值为
(PartitionKey eq 'D4AS3') and (TimeReceived ge datetime'2018-06-18T11:30:00.0000000Z')
此处日期值更改为2018-06-18T11:30:00.0000000Z
,而传递给TableQuery.GenerateFilterConditionForDate
的值为{6/18/2018 5:00:00 PM}
我的要求
我们如何才能使使用 GenerateFilterConditionForDate 构建的查询在结果查询中具有相同的传递日期时间 而不是更改 UTC 时间值? 任何想法,请分享。
这是 Azure 中的设计。
它提倡以 UTC 时间存储,因为它是标准时间,您可以在其中计算任何其他时区。
我们可以在调用 TableQuery.GenerateFilterConditionForDate
之前先将本地时区时间转换为 UTC 时间,如下所示:
DateTime convertedDate = DateTime.SpecifyKind(DateTime.Parse("6/18/2018 5:00:00 PM"),DateTimeKind.Utc);
正如 Gaurav Mantri 在上面评论的那样:"This is expected behavior as all the date/time type attribute values are stored in UTC"。当我们从 table:
检索 UTC 格式的日期时间时,我们还可以将 UTC 时间转换为本地时区时间DateTime dt = convertedDate.ToLocalTime();
如评论和其他答案中所述,这是 Azure 表的默认行为。所有 date/time 值都存储为 UTC。
同样,如评论中所述,如果您希望保留 date/time 值,一种可能的解决方案是获取 date/time 值的 ticks
并将该值存储为Int64
类型属性。在查询之前,您可以获得 date/time 的刻度值并将其用于查询目的。