asp.net - NodaTime conversions (Part 2). How to? -


following first post:

datetime conversions using nodatime on asp.net mvc 3 razor website. how to?

i'm struggling find easy way convert date/time between local , utc (both ways), using nodatime.

the current picture is:

  • i have date/time saved utc in database.
  • when displaying user, should consider local time zone , convert accordingly.
  • when user provides date/time filter, need convert utc before sending sql query.

what have far:

extension convert utc local (this part 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 example         var userstimezone = timezoneprovider[userstimezoneid];          var userszoneddatetime = zoneddbdatetime.withzone(userstimezone);          return userszoneddatetime.todatetimeunspecified();     } 

extension convert local utc (this part problem):

    public static datetime localtoutc(this datetime datetime)     {         idatetimezoneprovider timezoneprovider = datetimezoneproviders.tzdb;         var userstimezoneid = "europe/london";         var userstimezone = timezoneprovider[userstimezoneid];          var datetimefromdb = new datetime(datetime.year, datetime.month, datetime.day, datetime.hour, datetime.minute, datetime.second, datetime.millisecond);         var zoneddbdatetime = userstimezone.atleniently(localdatetime.fromdatetime(datetimefromdb));          var utctimezoneid = "utc";         var utctimezone = timezoneprovider[utctimezoneid];          var utczoneddatetime = zoneddbdatetime.withzone(utctimezone);          return utczoneddatetime.todatetimeutc();     } 

what doing wrong here?

your utctolocal looks it's doing more work needs to, honest.

it should be:

// note: datetime here must have "kind" of utc. public static datetime utctolocal(this datetime datetime) {     instant instant = instant.fromdatetimeutc(datetime);     idatetimezoneprovider timezoneprovider = datetimezoneproviders.tzdb;     var userstimezoneid = "europe/london"; //just example     var userstimezone = timezoneprovider[userstimezoneid];     var userszoneddatetime = instant.inzone(userstimezone);     return userszoneddatetime.todatetimeunspecified(); } 

similarly localtoutc should along these lines:

// datetime here should have "kind" of unspecified public static datetime localtoutc(this datetime datetime) {     localdatetime localdatetime = localdatetime.fromdatetime(datetime);      idatetimezoneprovider timezoneprovider = datetimezoneproviders.tzdb;     var userstimezoneid = "europe/london";     var userstimezone = timezoneprovider[userstimezoneid];      var zoneddbdatetime = userstimezone.atleniently(localdatetime);     return zoneddbdatetime.todatetimeutc(); } 

you don't need convert different time zone: zoneddatetime knows instant is, , todatetimeutc right thing. note there's no real datetimefromdb here, because if you're converting unspecified datetime, that's presumably user...


Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -