See the question and my original answer on StackOverflow

You can fix these issues by stating that all transported dates (moved between remote systems) are in fact UTC, for example:

public DateTime StartDateUtc
{
...
}

public DateTime EndDateUtc
{
...
}

And you leave the responsability of conversion to and from local time only to user interfaces code (or the highest layers of your application).

Note you can't really enforce this technically, only by convention / documentation, and making sure properties and methods are semantically marked "as UTC". A bad programmer will always be able to pass a local date to these properties:

StartDateUtc = DateTime.UtcNow; // this is correct
StartDateUtc = DateTime.Now; // this is wrong