2013-01-07 153 views
2

我需要从的Axapta表中获取时间戳,例如从表JMGABSENCECALENDAR开始,每次都没有时区和/或日光偏移。UTC日期时间偏移量

this作为初始方法,并调整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值仅返回当前的偏移量。

任务在2008年TSQL

回答

2

要解决我有同样的问题,但它是在一个完全不同的设置。我与axapta无关。 但是,我有问题,我不得不知道不同时间的UTC偏移。这里棘手的部分是,不同国家对夏令时使用不同的方法,因此不同国家可能会同时出现偏移。

我所做的就是创建一个查找表,我在UTC偏移量改变的日期中输入这些是已知的日期。我给了它一个偏移列,所以我可以很容易地使用between运算符查找我需要的偏移量。

它为我工作,也许这种解决方案可以为您提供一些东西?

Ps。您不必从注册表中查找UTC日期偏移量。使用功能GETUTCDATE()将给你相同的;)使用内部DATADD使它有点更具可读性;)

玩得开心,我希望我能有助于您的问题...

+0

感谢您的回答 - 但查找表并不是我的第一选择。 UTC的更改日期可能会有所不同,每年不一样,我不想有需要每年支持的其他表格;)getutcdate()可能取代重新展示的信息+1! – Nico

+0

Nico,我的意思是,你可以生成一次并使用它多年。在我的情况下,我可以创建一个表格,这个表格可以给我所有15年的所有时间,这对于这个客户来说已经足够了。 –

0

只是因为夏令时开关日期每年都会发生变化,而州和州之间也会发生变化,您唯一可行的选择是查找表。

你可以找到例如这里http://www.timeanddate.com/time/dst/2013a.html

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

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