getutcdate()
и окружающие cast()
вызываются только при первом назначении переменной @CurrentDate
. Переменные значения , а не функции. Вы создаете переменную с определенным типом и назначаете ей конкретное значение этого типа.
Однако тип *1009* для @CurrentVariable
равен Date
... не DateTime
. Не DateTime2
. Не DateTimeOffset
. Это означает, что переменная содержит только информацию Date
. Компонент времени отсутствует, поэтому на сегодняшний день назначенное значение 2019-03-29
будет оставаться действительным весь день.
Очень скоро дата UTC станет 2019-03-30
. Это произойдет в Англии (или где-нибудь с положительным смещением UTC) задолго до того, как это произойдет где-нибудь в США. Тем не менее, значение в переменной останется 2019-30-29
.
Что действительно сбивает с толку, так это когда вы назначаете переменную в месте, где значение даты отличается от местного времени, и переход происходит во время работы программы. Значение в переменной никогда не изменяется , если только вы не присвоите его снова ... но ожидание значения этого значения действительно изменится.