DateTime vs DateTimeOffset



В .NET есть два главных способа работы со временем: DateTime и DateTimeOffset.



DateTimeOffset это представление абсолютного времени.

То есть, речь идёт о моменте во времени, который является однозначно единым для всех.

Другим способом представить мировое время является DateTime с полем Kind установленным в значение DateTimeKind.Utc.



DateTime же представляет другое понятие - календарное время.

Календарное время можно представить как точку на чьём-то календаре.

Но мы понимаем, что календарей по всему миру очень много и все они различаются по часовым поясам.



Соответственно, DateTimeOffset предоставляет тот же функционал, что и DateTime, но вместе со знанием часового пояса.