将UTC DateTime转换为本地DateTime

我有以下ASP.Net MVC控制器方法:

public ActionResult DoSomething(DateTime utcDate) { var localTime = utcDate.ToLocalTime(); } 

问题是localTime将具有与utcDate完全相同的值。 我假设这是因为utcDate不知道它具有UTC值。 所以我的问题是如何将utcDate(我知道是UTC)转换为本地?

如果您知道 DateTime包含UTC值,则可以使用以下内容 :

 DateTime iKnowThisIsUtc = whatever; DateTime runtimeKnowsThisIsUtc = DateTime.SpecifyKind( iKnowThisIsUtc, DateTimeKind.Utc); DateTime localVersion = runtimeKnowsThisIsUtc.ToLocalTime(); 

例如,在我当前的应用程序中,我使用SQL的utcnow在我的数据库中创建时间戳,但是当我将它们读入我的C#应用​​程序时, Kind proeprty始终是Unknown 。 我创建了一个包装器函数来读取时间戳,故意将其Kind设置为Utc ,然后将其转换为本地时间 – 基本上如上所述。

请注意,如果以下一个(或两个)成立, DateTime.ToLocalTime()仅不会影响该值:

  • DateTimeKind属性是DateTimeKind.Local
  • 您当地的时区是“无变化”是正确的转换

我想我们可以假设第二点不正确。 因此,似乎iKnowThisIsUtcKind属性已设置为Local 。 您需要弄清楚为什么提供给您的这些DateTime认为它们是本地的。

如MSDN所述,您需要Date的Kind属性为UTC,ToLocalTime()才能工作(并将日期转换为本地时间.http://msdn.microsoft.com/en-us/library/system .datetime.tolocaltime.aspx

试试这个:

 utcDate = DateTime.SpecifyKind(utcDate, DateTimeKind.Utc); var localTime = utcDate.ToLocalTime(); 

请尝试以下方法:

 public static DateTime UtcToPacific(DateTime dateTime) { return TimeZoneInfo.ConvertTimeFromUtc(dateTime, TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time")); } 

显然,将太平洋地区改为当地时区。

如果要查找计算机上存在的时区,请参阅以下链接: http : //msdn.microsoft.com/en-us/library/bb397781.aspx

或这个:

 var localTime = new DateTimeOffset(utcDate,TimeSpan.FromHours(0)) .ToLocalTime().DateTime;