это происходит потому, что драйвер преобразует DateTimes в UT C перед сохранением в БД. см. исходный код здесь
. Лучше всего всегда иметь дело с UT C в коде приложения, а затем преобразовывать его в местное время при представлении данных конечному пользователю.
например, при создании записи вы делаете это:
CreationDate = new DateTime(2020, 02, 03)
//this is not neccessary as the driver takes care of the conversion
CreationDate = new DateTime(2020, 02, 03, 0, 0, 0, DateTimeKind.Utc)
и на презентации вы делаете это:
project.CreationDate.ToLocalTime()
, если ваш уровень представления представляет собой некоторую js среду вы отправляете данные в веб-приложение в формате ut c и javscript преобразует их в местное время пользователя при отображении.
причина иметь дело с UT C только в коде приложения, потому что даже если в будущем ваш код будет работать на нескольких компьютерах в нескольких регионах, ваш код будет связан только с одним часовым поясом. переход на местное время является обязанностью логики представления c.