我有以下的ASP.Net MVC控制器方法:
public ActionResult DoSomething(DateTime utcDate)
{
var localTime = utcDate.ToLocalTime();
}
问题在于localTime将具有与utcDate完全相同的值。我认为这是因为utcDate不知道它具有UTC值。因此,我的问题是如何将我知道是UTC的utcDate转换为本地时间?
DateTime
包含 UTC 值,可以使用如下方法:DateTime iKnowThisIsUtc = whatever;
DateTime runtimeKnowsThisIsUtc = DateTime.SpecifyKind(
iKnowThisIsUtc,
DateTimeKind.Utc);
DateTime localVersion = runtimeKnowsThisIsUtc.ToLocalTime();
例如,在我的当前应用程序中,我使用 SQL 的 utcnow
创建数据库中的时间戳,但当我将它们读入我的 C# 应用程序时,Kind
属性总是 Unknown
。我创建了一个包装函数来读取时间戳,有意将其 Kind
设置为 Utc
,然后转换为本地时间 - 基本上就像上面那样。DateTime.ToLocalTime()
仅在以下情况下不会影响值:
DateTime
的 Kind
属性为 DateTimeKind.Local
iKnowThisIsUtc
的 Kind
属性已经设置为 Local
。你需要弄清楚为什么提供给你这些 DateTime
的东西认为它们是本地的。请尝试以下方法:
public static DateTime UtcToPacific(DateTime dateTime)
{
return TimeZoneInfo.ConvertTimeFromUtc(dateTime, TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));
}
显然,将太平洋时区更改为本地时区。
如果您想查找计算机上存在哪些时区,请参见以下链接:http://msdn.microsoft.com/en-us/library/bb397781.aspx
utcDate = DateTime.SpecifyKind(utcDate, DateTimeKind.Utc);
var localTime = utcDate.ToLocalTime();
var localTime = new DateTimeOffset(utcDate,TimeSpan.FromHours(0))
.ToLocalTime().DateTime;