From 752fac609fce4ae373e29855162f7a5761f7bed1 Mon Sep 17 00:00:00 2001 From: MaximoB Date: Mon, 11 Dec 2017 15:20:42 -0600 Subject: [PATCH] Changed to remove the special case for 'Australia/Lord_Howe'. Made skip on gap more robust and give correct behavior on all time skips, not just the ones for DST. --- Database/Functions/LocalToUtc.sql | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Database/Functions/LocalToUtc.sql b/Database/Functions/LocalToUtc.sql index a6f8e39..d0d5dd5 100644 --- a/Database/Functions/LocalToUtc.sql +++ b/Database/Functions/LocalToUtc.sql @@ -8,28 +8,28 @@ RETURNS datetimeoffset WITH SCHEMABINDING AS BEGIN - DECLARE @OffsetMinutes int + DECLARE @OffsetMinutes int; IF @FirstOnFallBackOverlap = 1 SELECT TOP 1 @OffsetMinutes = [OffsetMinutes] FROM [Tzdb].[Intervals] i INNER JOIN Tzdb.GetZoneId_Inline(@tz) z ON z.ZoneId = i.ZoneId - WHERE [LocalStart] <= @local AND [LocalEnd] > @local - ORDER BY [UtcStart] + WHERE i.[LocalStart] <= @local AND i.[LocalEnd] > @local + ORDER BY i.[UtcStart] ASC; ELSE SELECT TOP 1 @OffsetMinutes = [OffsetMinutes] FROM [Tzdb].[Intervals] i INNER JOIN Tzdb.GetZoneId_Inline(@tz) z ON z.ZoneId = i.ZoneId - WHERE [LocalStart] <= @local AND [LocalEnd] > @local - ORDER BY [UtcStart] DESC + WHERE i.[LocalStart] <= @local AND i.[LocalEnd] > @local + ORDER BY i.[UtcStart] DESC; IF @OffsetMinutes IS NULL BEGIN - IF @SkipOnSpringForwardGap = 0 RETURN NULL + IF @SkipOnSpringForwardGap = 0 RETURN NULL; - SET @local = DATEADD(MINUTE, CASE @tz WHEN 'Australia/Lord_Howe' THEN 30 ELSE 60 END, @local) - SELECT TOP 1 @OffsetMinutes = [OffsetMinutes] + SELECT TOP 1 @OffsetMinutes = i.[OffsetMinutes] FROM [Tzdb].[Intervals] i INNER JOIN Tzdb.GetZoneId_Inline(@tz) z ON z.ZoneId = i.ZoneId - WHERE [LocalStart] <= @local AND [LocalEnd] > @local - END + WHERE i.[LocalEnd] <= @local + ORDER BY i.[UtcStart] DESC; + END; - RETURN TODATETIMEOFFSET(DATEADD(MINUTE, -@OffsetMinutes, @local), 0) -END + RETURN TODATETIMEOFFSET(DATEADD(MINUTE, -@OffsetMinutes, @local), 0); +END;