Как вы отображаете значение? Я подозреваю, что это просто применение вашего местного часового пояса к дате.
Например, попробуйте распечатать:
date.Year
date.Kind
date.Hour
Я предполагаю, что вы увидите, что date
- это на самом деле UTC DateTime
с правильным значением.
К сожалению, .NET неявно выполняет преобразование часового пояса, но тогда типы даты и времени в .NET все равно оставляют желать лучшего: (
Альтернативой может быть использование DateTimeOffset
, что должно сделать его немного понятнее.