c# - Converting UTC to local time returns strange result -
i have solution of 3 projects:
- core
- outlook add-in
- asp.net website
both, outlook add-in , website use same methods core project data sql server. when write data database, convert datetime
values of 2 tables utc time:
poll_start poll_end 2013-07-31 12:00:00.000 2013-08-01 12:00:00.000
and
pick_date 2013-07-31 12:00:48.000 2013-07-31 13:00:12.000
when data in outlook add-in, correct result:
when opening same in website, picks fine:
but start , end time "broken" - offset added, bute wrong hours used:
here's code converting, both, outlook , website, use:
private static void converttolocaltime(poll item) { item.poll_start = item.poll_start.fromutc(); item.poll_end = item.poll_end.fromutc(); } private static void converttolocaltime(pick pick) { if (pick.pick_date != null) pick.pick_date = ((datetime)pick.pick_date).fromutc(); }
and implementation of datetime.fromutc()
:
public static datetime fromutc(this datetime value) { var local = timezoneinfo.local; return timezoneinfo.converttime(value, timezoneinfo.utc, local); }
i had same result datetime.tolocaltime()
. idea?
edit 1:
this how start , end gets displayed on website (end end
instead of start
):
var startcell = new tablecell { text = string.format( @"<a href='{0}' title='{2}' target='_blank'>{1:dd.mm.yyyy hh:mm \u\t\czzz}</a>", common.gettimeanddatehyperlink(_poll.start, "vote start"), _poll.start, converttolocaltimezone), cssclass = "infocontent" };
and picks:
answercell = new tablecell { text = string.format( @"<a href='{0}' title='{2}' target='_blank'>{1}</a>", common.gettimeanddatehyperlink(ao.time, ao.realanswer), ao.realanswer, converttolocaltimezone) };
ao.realanswer
returns formated datetime string:
return string.format(wholetime == true ? "{0:d}" : @"{0:dd.mm.yyyy hh:mm \u\t\czzz}", time);
i solved issue now. datetime
values start , end didn't correctly converted: values weren't casted local time.
the reason, why website displayed time local time is, sql server stores every datetime
value datetimekind.unspecified
instead of keeping specified data (e.g. datetimekind.utc
) during insert. when reading data server, kinds datetimekind.unspecified
, .tostring()
of datetime
uses local kind. results utc time + local utc offset.
Comments
Post a Comment