2

我需要从 Axapta-tables 中获取时间戳TSQL,每次都没有时区和/或日光偏差,例如从 table JMGABSENCECALENDAR

将此作为初始方法,并考虑this,它适用于当前时间。但是从引用其他时间戳的表中读取数据,第二个链接中提供的解决方案没有获取到指定时间的日光信息。

例如:

我添加了今天的缺席(2012-01-07)。现在,使用 SSMS,读取这个数据集会导致

开始时间 =2013-01-06 23:00:00.000 和结束时间 =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 中解决。

4

2 回答 2

2

我有同样的问题,但它是在一个完全不同的环境中。我与axapta无关。但是,我遇到的问题是我必须知道不同时间的 UTC 偏移量。这里棘手的部分是不同国家对夏令时使用不同的方法,因此不同国家可能同时出现偏移量差异。

我所做的是创建一个查找表,在其中输入 UTC 偏移量更改的日期,这些是已知日期。我给了它一个偏移量列,这样我就可以使用 between 运算符轻松查找特定日期所需的偏移量。

它对我有用,也许这个解决方案可以为您提供一些东西?

附言。您不必从注册表中查找 UTC 日期偏移量。使用函数 getutcdate() 将给您相同的结果;)在 DATADD 中使用它使其更具可读性;)

玩得开心,我希望我能为您的问题做出贡献...

于 2013-01-22T17:40:25.057 回答
0

仅仅因为夏令时切换日期每年和州之间都不同,您唯一可行的选择就是查找表。

例如,您可以在此处找到数据http://www.timeanddate.com/time/dst/2013a.html

但是,您可能不必自己维护该列表。timeanddate.com 在他们的网站上有一个计算器。其他人提供类似的服务。您可以查找一个公共 API,然后使用几行 CLR 代码从您的数据库中调用该 API。

或者您可以使用此类服务​​来维护您自己的数据副本。拥有自己的查找表将是迄今为止最快的解决方案。

于 2013-01-23T18:12:41.310 回答