On the SQL Server side:
- When storing a datetime in SQL Server, always generate the datetime in the SQL stored proc itself (in the INSERT or UPDATE statement); never pass it from the calling client program.
- Always store the datetime as UTC and not local -- use the GETUTCDATE() function in SQL Server, not GETDATE()
- For comparisons of current datetime against the datetime on a given row, again ONLY use the current UTC time generated by the SQL Server and not by the client app. To get the current server UTC time, you can create a simple stored proc that just returns the GETUTCDATE() value, perhaps as an OUTPUT parameter.
- Use DateTime.Compare method to compare the datetime values received from SQL Server
- If you need to convert a UTC time returned by the server into the local time, for display purposes, use the DateTime.ToLocalTime method in your client application. This also automatically factors-in any Daylight Saving time rule in effect.
PS: Why is "Coordinated Universal Time" abbreviated to UTC and not to CUT? Check out these links: