В .NET есть разные типы под разные задачи, и из этого обычно и растут ошибки. DateTime это просто дата и время, но без явного смещения. DateTimeOffset хранит дату, время и смещение от UTC, поэтому однозначно задает момент времени.
Для часовых поясов используйте
TimeZoneInfo, Microsoft прямо пишет, что для новой разработки лучше TimeZoneInfo вместо старого TimeZone.var nowUtc = DateTimeOffset.UtcNow;
var moscow = TimeZoneInfo.FindSystemTimeZoneById("Europe/Moscow");
var nowMoscow = TimeZoneInfo.ConvertTime(nowUtc, moscow);
Console.WriteLine(nowUtc);
Console.WriteLine(nowMoscow);
TimeZoneInfo умеет переводить время между часовыми поясами, а DateTimeOffset делает момент переносимым между машинами и окружениями.Еще два полезных типа.
DateOnly для календарной даты без времени, например отпуск или дата рождения. TimeOnly для времени без даты, например расписание.var vacation = new DateOnly(2026, 1, 10);
var standup = new TimeOnly(10, 30);
Console.WriteLine(vacation);
Console.WriteLine(standup);
DateOnly и TimeOnly заменяют костыли с DateTime и TimeSpan, когда вам не нужен момент времени.📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#sharp_view