将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()
仅不会影响该值:
-
DateTime
的Kind
属性是DateTimeKind.Local
- 您当地的时区是“无变化”是正确的转换
我想我们可以假设第二点不正确。 因此,似乎iKnowThisIsUtc
的Kind
属性已设置为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;