gpt4 book ai didi

.net - 将日期从Azure表存储转换回用户的时区

转载 作者:行者123 更新时间:2023-12-02 06:58:34 25 4
gpt4 key购买 nike

据我了解,Azure 表存储将所有日期时间字段存储为 UTC AKA Zulu 时间。

目前我于 2021 年 5 月 11 日 18:10 在英国。当前时区是 BST (+1:00)。

如果我使用 RoundtripKind 选项将其序列化为 JSON

string json = JsonConvert.SerializeObject(this.syncDates, Formatting.Indented, new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind
});

它将被发送到我的 Web Api 作为

"2021-05-11T18:10:31.740582+01:00"

但是,当它被反序列化到 ASP NET Core Controller 方法参数中时,它会显示为 DateTimeKind 为 Local 的 DateTime,但不再具有任何时区信息。

11/05/2021 18:10:31

然后,我将日期写入 Azure 表存储,它将存储为 UTC,即

11/05/2021 17:10:31

当我从 Web API 检索数据以将其显示给原始用户或想要查看其数据的其他人时,了解与用户相关的正确日期和时间非常重要。

  1. 我是否应该将原始时间偏移\区域存储在单独的字段中,并使用它再次将日期转换回来?

  2. 我是否应该根本不存储为 DateTime 并使用 DateTimeOffset,或者这毫无意义,因为 Azure 表存储也只会将 DTO 转换为 UTC?

最佳答案

要在序列化/反序列化期间保留偏移量,是的 - 您应该使用 DateTimeOffset输入而不是 DateTime .

关于 Azure 表存储,虽然 SDK 支持 DateTimeOffset ,不幸的是服务本身没有。从而节省了DateTimeOffset Azure 存储的值将产生等效的 UTC DateTime正在存储,如 .UtcDateTime 所示DateTimeOffset的属性(property)。检索时,您将得到 DateTimeOffset其日期和时间是等效的 UTC 日期和时间,并且偏移量为零。

因此,如果您确实需要跟踪偏移量,则需要将其存储在单独的列中,并在返回时将两者合并在 Controller 中。 DateTimeOffset.ToOffset方法是正确执行此操作的最简单方法。

或者,如果您只需要正确的日期和时间部分,您可以撒点小谎并使用 UTC DateTime即使该值实际上不是 UTC 格式。只需调用DateTime.SpecifyKindDateTimeKind.Utc在进来的路上,和DateTimeKind.Unspecified出去的路上。您将失去偏移量,但如果您不需要它,那么这可以工作。

关于.net - 将日期从Azure表存储转换回用户的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67491677/

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