【发布时间】:2021-09-29 19:00:24
【问题描述】:
我请求更改当前类型为“时间”的列,而不是只捕获时间,我需要捕获所谓的“UTC 时间”。
我的想法是创建一个包含所有时区的固定代码列表,然后将其作为 FK 引用到适当的表中。
我的问题是:
- “时间”类型的列是否也包含有关时区的信息(UTC,例如 15:00:00 +2 (gmt + 2)),如果没有,您能否建议我为该列提供另一种类型?
- 我可能需要将它分成两列吗?例如:[15:00:00] - 开始时间,[+2:00] - UtcOffset
- EF 插入:当我插入到数据库时,对于那个特定的列,我是否应该将我的
DateTime对象转换为例如DateTimeOffset?
提前致谢。
【问题讨论】:
-
如果您只是将 UTC 时间存储在您的列中,难道一切都没有问题吗?无需存储任何时区信息,因为它始终是 UTC,如果您需要在特定时区显示某些内容,只需在前端执行?
-
嗯,实际上,我在世界各地有一些房子,每个房子都有自己的时区。所以基本上,我需要将偏移信息与每个房子一起存储。因此,当我从不同的时区预约/访问那所房子时,我需要知道我的房子在哪个时区,然后在那个时区保存预约。
-
是的,您需要为 house 设置时区,而不是时间。因此,当那所房子有问题时,请在前端显示正确的时间。
-
所以基本上,我想出了 mssql 中的列 StartTime
time,以及其他nvarchar列名称 TimeZone。例如,StartTime 是"12:00:00",TimeZone 是"+2:00"。那么如何在 c# 中结合这两个 props 来获取 DateTimeOffset obj? -
@JamesZ 有很多人认为存储 UTC 就足够了。事实并非如此,因为补偿确实会发生变化——一年两次。 DST 规则也会发生变化。当您必须显示日期时,您不知道时区规则是什么。在Falsehoods programmers believe about time UTC 中出现了两次,其中第一个谬误最重要:
The local time offset (from UTC) will not change during office hours.
标签: asp.net sql-server entity-framework timezone-offset