У меня была похожая проблема с UTC / GMT1, и хотя многие заявления о том, что вы хотите этого избежать в базе данных, являются очень верным и ценным советом, не всегда возможно избежать этого полностью.
Однако, когда вы работаете с GMT1, вам повезло, поскольку переход на летнее время для этого фактически основан на алгоритме. (В отличие от США летнее время, которое, как я понимаю, определяется законодательными органами.)
Из этого я смог сделать эту хранимую процедуру, которая преобразует ввод даты и времени UTC в дату и время по Гринвичу1. Надеюсь, это поможет;)
CREATE PROCEDURE spUTCGMT1 @date AS DATETIME
AS
BEGIN
DECLARE @year AS INT = DATEPART( YYYY,@date)
DECLARE @f AS INT = (FlOOR( (5 * @year) / 4) - FLOOR( @year / 100)+ FLOOR( @year / 400)) % 7
IF(@date BETWEEN
DATEADD( DD,- ((@f + 5) % 7),(CAST(@year AS CHAR(4)) + '-03-31')) AND
DATEADD( DD,- ((@f + 2) % 7),(CAST(@year AS CHAR(4)) + '-10-31')))
SELECT
DATEADD( HH,2,@date)
ELSE
SELECT
DATEADD( HH,1,@date)
END