我想在tsql中循环一段时间,并打印utc datetimes和我们的本地变体.
我们住在UTC 1,所以我可以轻松添加1小时,但在夏季,我们住在UTC 2.
我们住在UTC 1,所以我可以轻松添加1小时,但在夏季,我们住在UTC 2.
在C#中,我可以创建一个datetime并使用一个方法来请求UTC变体,反之亦然.
直到现在我有这个:
declare @counter int declare @localdate datetime declare @utcdate datetime set @counter = 0 while @counter < 100 begin set @counter = @counter + 1 print 'The counter is ' + cast(@counter as char) set @utcdate = DATEADD(day,@counter,GETUTCDATE()) --set @localdate = ???? print @localdate print @utcdate end
解决方法
假设您正在使用sql 2005,您可以开发一个sql CLR函数来采用UTC日期并转换为本地日期.
This link是MSDN如何解释如何在C#中创建标量UDF.
[sqlFunction()] public static sqlDateTime ConvertUtcToLocal(sqlDateTime utcDate) { // over to you to convert sqlDateTime to DateTime,specify Kind // as UTC,convert to local time,and convert back to sqlDateTime }
你以上的样本就会变成
set @localdate = dbo.ConvertUtcToLocal(@utcdate)
sql CLR在部署方面有其开销,但我觉得这样的情况是最适合的.