Как вычислить локальную дату и время от даты и времени UTC в tsql (sql 2005)?

я хочу циклично выполниться в течение времени в tsql и распечатать UTC datetimes и наш локальный вариант. Мы живем в UTC +1, таким образом, я мог легко добавить 1 час, но в летнем периоде мы живем в UTC +2.

В C# я могу создать дату и время и использовать метод для просьбы вариант 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
16
задан Michel 4 August 2010 в 12:10
поделиться

2 ответа

Предполагая, что вы используете SQL 2005 и выше, вы можете разработать SQL-функция CLR, которая принимает дату в формате UTC и конвертирует ее в местную дату.

Эта ссылка представляет собой инструкции MSDN, объясняющие, как можно создать скалярную UDF на C #.

Создайте функцию SQL в соответствии со строками

[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 имеет свои накладные расходы с точки зрения развертывания, но я считаю, что такие случаи, как это, подходят лучше всего.

5
ответ дан 30 November 2019 в 17:03
поделиться

GETUTCDATE() просто дает вам текущее время в UTC, любое DATEADD(), которое вы сделаете с этим значением, не будет включать сдвиги летнего времени.

Лучше всего построить собственную таблицу перевода UTC или просто использовать что-то вроде этого:

http://www.codeproject.com/KB/database/ConvertUTCToLocal.aspx

1
ответ дан 30 November 2019 в 17:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: