gpt4 book ai didi

asp.net - 如果指定了 Z 后缀,为什么 Odata 会根据我的机器本地时间更改过滤器中的日期时间值?

转载 作者:行者123 更新时间:2023-12-02 01:04:07 31 4
gpt4 key购买 nike

我在我的 asp.net web api 上使用 Odata V4。当我使用 odata 发出此请求以按日期时间过滤时,它从我在 url 中提供的日期减去 8 小时(我的计算机本地时间设置为太平洋标准时间 UTC -8:00),从 Entity Framework 发送给我的日期开始D B。

...Documents?$select=Id,ModifiedDate&$filter=ModifiedDate ge 2018-02-10T00:00:00Z&$orderby=ModifiedDate

这是 Entity Framework 提供的此请求的日志。
Opened connection at 2/9/2018 5:16:40 PM -08:00
SELECT TOP (101)
[Project1].[DocumentId] AS [DocumentId],
[Project1].[C2] AS [C1],
[Project1].[C3] AS [C2],
[Project1].[C4] AS [C3],
[Project1].[C5] AS [C4],
[Project1].[C1] AS [C5]
FROM ( SELECT
[Extent1].[DocumentId] AS [DocumentId],
[Extent1].[ModifiedDate] AS [ModifiedDate],
CAST( [Extent1].[DocumentId] AS bigint) AS [C1],
N'8da97389-55d6-4534-b683-2e767485606a' AS [C2],
N'ModifiedDate' AS [C3],
CAST( [Extent1].[ModifiedDate] AS datetime2) AS [C4],
N'Id' AS [C5]
FROM [dbo].[EstimateDocument] AS [Extent1]
WHERE [Extent1].[ModifiedDate] >= convert(datetime2, '2018-02-09 16:00:00.0000000', 121)
) AS [Project1]
ORDER BY [Project1].[ModifiedDate] ASC, [Project1].[C1] ASC
-- Executing at 2/9/2018 5:16:40 PM -08:00
-- Completed in 435 ms with result: SqlDataReader

似乎 odata 从我所说的过滤时间中减去 8 小时。我认为我在 url 中指定的日期末尾的 Z 代表 UTC 时间。为什么 Odata 在发出请求之前更改此日期?存储在数据库中的日期也是 UTC 时间。为什么它会认为需要进行任何转换?

我注意到如果我将计算机本地时间更改为 UTC(我的服务在本地运行),那么它不会尝试进行任何转换。但我不能指望该服务在本地时间设置为 UTC 的机器上运行。

最佳答案

在您定义 UseMvc 的 Api 上,添加 SetTimeZoneInfo(TimeZoneInfo.Utc)。

关于asp.net - 如果指定了 Z 后缀,为什么 Odata 会根据我的机器本地时间更改过滤器中的日期时间值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48716369/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com