Currently, we have a standard way of dealing with .NET DateTime
\'s in a TimeZone aware way: Whenever we produce a DateTime
we do it in UTC (e.g. us
From Microsoft:
These uses for DateTimeOffset values are much more common than those for DateTime values. As a result, DateTimeOffset should be considered the default date and time type for application development.
source: "Choosing Between DateTime, DateTimeOffset, TimeSpan, and TimeZoneInfo", MSDN
We use DateTimeOffset
for nearly everything as our application deals with particular points in time (e.g. when a record was created/updated). As a side note, we use DATETIMEOFFSET
in SQL Server 2008 as well.
I see DateTime
as being useful when you want to deal with dates only, times only, or deal with either in a generic sense. For example, if you have an alarm that you want to go off every day at 7 am, you could store that in a DateTime
utilizing a DateTimeKind
of Unspecified
because you want it to go off at 7am regardless of DST. But if you want to represent the history of alarm occurrences, you would use DateTimeOffset
.
Use caution when using a mix of DateTimeOffset
and DateTime
especially when assigning and comparing between the types. Also, only compare DateTime
instances that are the same DateTimeKind
because DateTime
ignores timezone offset when comparing.