我需要从TSQL
中的Axapta表中获取时间戳,而不是每次都有时区和/或日光偏差偏移,例如来自表格JMGABSENCECALENDAR
。
将this作为初始方法,然后重新审核this,它适用于当前时间。但是,从表格中读取其他时间戳的数据,第二个链接中提供的解决方案无法获得有关日光的信息到指定的时间。
例如:
我今天补充缺席(2012-01-07)。 现在,使用SSMS,读取此数据集将导致
starttime = 2013-01-06 23:00:00.000
和endtime = 2013-01-07 23:00:00.000
没关系,我可以使用
DECLARE @UTCOffset SMALLINT
EXEC master..xp_regread
'HKEY_LOCAL_MACHINE',
'SYSTEM\CurrentControlSet\Control\TimeZoneInformation',
'ActiveTimeBias',
@UTCOffset OUTPUT
SELECT DATEADD(MINUTE, @UTCOffset, GETDATE()) AS UTCTime
删除偏移量。这在实际日期工作正常,但是在过去或未来时间删除偏移量的正确方法是什么,例如2012-07-01
?
这里,由于夏季,偏移是120分钟。读取Reg-Value仅返回当前偏移。
任务必须在TSQL 2008中解决。
答案 0 :(得分:2)
我有同样的问题,但它处于一个完全不同的环境中。我与axapta无关。 但是,我有一个问题,我必须知道不同时间的UTC偏移。这里棘手的部分是不同的国家对夏令时使用不同的方法,因此不同国家可能会同时出现偏差的差异。
我所做的是创建一个查找表,其中我放入了UTC偏移更改的日期,这些是已知日期。我给了它一个偏移列,这样我就可以使用between运算符轻松查找某个日期所需的偏移量。
它对我有用,也许这个解决方案可以为你提供一些东西吗?
聚苯乙烯。您不必从注册表中查找UTC日期偏移量。使用函数getutcdate()会给你相同的;)在DATADD中使用它会使它更具可读性;)
玩得开心,我希望我能为你的问题做出贡献......
答案 1 :(得分:0)
仅仅因为夏令时切换日期每年和状态变化,您唯一可行的选择是查找表。
您可以在此处找到数据http://www.timeanddate.com/time/dst/2013a.html
但是,您可能不必自己维护该列表。 timeanddate.com在他们的网站上有一个计算器。其他人提供类似服务。您可以查找公共API,然后使用几行CLR代码从数据库中调用该API。
或者您可以使用此类服务来维护您自己的数据副本。拥有自己的查找表是迄今为止最快的解决方案。