I have the following ASP.Net MVC Controller method:
public ActionResult DoSomething(DateTime utcDate)
{
var localTime = utcDate.ToLocalTime();
}
or this:
var localTime = new DateTimeOffset(utcDate,TimeSpan.FromHours(0))
.ToLocalTime().DateTime;
as described by MSDN, you need the Kind property of your Date to be UTC, for the ToLocalTime() to work (and convert the date to local time. http://msdn.microsoft.com/en-us/library/system.datetime.tolocaltime.aspx
Try this:
utcDate = DateTime.SpecifyKind(utcDate, DateTimeKind.Utc);
var localTime = utcDate.ToLocalTime();
If you know the DateTime
contains a UTC value, you can use the following:
DateTime iKnowThisIsUtc = whatever;
DateTime runtimeKnowsThisIsUtc = DateTime.SpecifyKind(
iKnowThisIsUtc,
DateTimeKind.Utc);
DateTime localVersion = runtimeKnowsThisIsUtc.ToLocalTime();
For example, in my current application, I create timestamps in my database with SQL's utcnow
, but when I read them into my C# application the Kind
proeprty is always Unknown
. I created a wrapper function to read the timestamp, deliberately set its Kind
to Utc
, and then convert it to local time - essentially as above.
Note that DateTime.ToLocalTime() only doesn't affect the value if one (or both) of the following holds:
DateTime
's Kind
property is DateTimeKind.Local
I think we can assume the second point isn't true. Thus it seems that iKnowThisIsUtc
's Kind
property is set to Local
already. You need to figure out why whatever is supplying you with these DateTime
s thinks they are local.
Try the following:
public static DateTime UtcToPacific(DateTime dateTime)
{
return TimeZoneInfo.ConvertTimeFromUtc(dateTime, TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));
}
Obviously change Pacific to your local timezone.
If you want to find out what time zones are present on your machine see the following link: http://msdn.microsoft.com/en-us/library/bb397781.aspx