将UTC DateTime转换为本地DateTime

Sha*_*lle 18 c# datetime utc

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

public ActionResult DoSomething(DateTime utcDate)
{
   var localTime = utcDate.ToLocalTime();
}
Run Code Online (Sandbox Code Playgroud)

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

Raw*_*ing 45

如果你知道DateTime包含UTC值,可以使用以下:

DateTime iKnowThisIsUtc = whatever;
DateTime runtimeKnowsThisIsUtc = DateTime.SpecifyKind(
    iKnowThisIsUtc,
    DateTimeKind.Utc);
DateTime localVersion = runtimeKnowsThisIsUtc.ToLocalTime();
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • 此示例代码中的变量名称为**perfect**.谢谢. (3认同)

Rob*_*t H 5

请尝试以下操作:

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

显然将太平洋时区更改为您当地的时区。

如果您想了解您的计算机上存在哪些时区,请参阅以下链接:http://msdn.microsoft.com/en-us/library/bb397781.aspx


tra*_*ter 5

如MSDN所描述的,你需要你的日期的类属性为UTC,对于ToLocalTime()工作(和日期转换为本地时间.http://msdn.microsoft.com/en-us/library/system .datetime.tolocaltime.aspx

试试这个:

utcDate = DateTime.SpecifyKind(utcDate, DateTimeKind.Utc);
var localTime = utcDate.ToLocalTime();
Run Code Online (Sandbox Code Playgroud)