Can anyone explain to me why?
Yeah. This is because DateTime is a fundamentally broken type , IMO. Basically Kind not used when comparing. This can break the old code, and this is not always what you want. It was added for .NET 1.1, and not always in great shape - it definitely was not fully integrated in all possible cases, as you saw for comparison.
As another example, even for Kind of Local (which is for the local time zone of the system) it is ignored for arithmetic, which means that the AddHours(1) call really only adds to the local time, instead of representing the elapsed time (which may end in the same local time or two hours later at local time, during the DST transition period).
My advice is to avoid comparing DateTime values โโof different kinds. This is almost never what you want to do.
(Of course, I also recommend using Noda Time , but that is a slightly different matter.)
source share