【发布时间】:2018-02-14 04:52:13
【问题描述】:
我们在 SQL Server 2008 中有数据,其中包含多个日期时间列。由于 SQL Server 中的日期格式是一个大整数值,即自 1970 年以来的秒数,我们使用DATEADD() 函数将其转换为实际的日期时间格式。但是我们面临的问题是,当我们使用 DATEADD() 时,我们获取的是 UTC 时区的数据,而我们想要的是 EST 中的数据。从那时起,我尝试简单地使用 -4 HR,但在 11 月至 3 月期间,我们领先 1 小时,因为当白天时间关闭时,差异为 5 小时。是否可以使用任何考虑夏令时的功能。任何帮助表示赞赏。
Current Function -> DATEADD(s, columnName, '01/01/1970 00:00:00')
问候,萨希尔
【问题讨论】:
-
没有任何原生的。这是非常困难的。多年来,夏令时的日期发生了变化。有些州不承认夏令时。甚至整个亚利桑那州都不承认夏令时。这只是美国的并发症。一旦你走出这些边界,它就会变得更加复杂。
-
有整个库是严格编写的,用于处理日期/时间(像 NodaTime、Momentjs 等),但我知道的不是 Sql Server,因为这通常是在应用层解决,而不是持久层。
-
您可以导入包装 TimeZoneInfo 类并从 Windows 注册表值中读取时区偏移量的程序集(与 Windows 相同)。当您应用 Windows 更新时,这些值会得到零星的更新。时区信息不仅会按计划(DST 或其他)进行更改,而且还会根据地区和国家/地区认为合适的情况临时更改。我会使用一个经过测试的库并将其导入 sql server。
标签: sql sql-server sql-server-2008 datetime dst