Following my first post:

DateTime conversions using NodaTime on ASP.Net MVC 3 Razor website. How to?

I'm struggling to find an easy way to convert date/time between local and UTC (both ways), using NodaTime.

The current picture is:

  • I have the date/time saved as UTC in the database.
  • When displaying it to the user, I should consider the local time zone and convert it accordingly.
  • When the user provides date/time as a filter, I need to convert it back to UTC before sending to the SQL query.

What I have so far:

Extension to convert from UTC to local (this part is working fine):

    public static DateTime UTCtoLocal(this DateTime dateTime)
    {
        IDateTimeZoneProvider timeZoneProvider = DateTimeZoneProviders.Tzdb;

        var utcTimeZone = timeZoneProvider["UTC"];
        var dateTimeFromDb = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second, dateTime.Millisecond);

        var zonedDbDateTime = utcTimeZone.AtLeniently(LocalDateTime.FromDateTime(dateTimeFromDb));

        var usersTimezoneId = "Europe/London"; //just an example
        var usersTimezone = timeZoneProvider[usersTimezoneId];

        var usersZonedDateTime = zonedDbDateTime.WithZone(usersTimezone);

        return usersZonedDateTime.ToDateTimeUnspecified();
    }

Extension to convert from local back to UTC (this part is the problem):

    public static DateTime LocaltoUTC(this DateTime dateTime)
    {
        IDateTimeZoneProvider timeZoneProvider = DateTimeZoneProviders.Tzdb;
        var usersTimezoneId = "Europe/London";
        var usersTimezone = timeZoneProvider[usersTimezoneId];

        var dateTimeFromDb = new DateTime(dateTim
Edit
Report