我有以下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.我创建了一个包装函数来读取时间戳,故意将其设置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"));
}
Run Code Online (Sandbox Code Playgroud)
显然将太平洋时区更改为您当地的时区。
如果您想了解您的计算机上存在哪些时区,请参阅以下链接:http://msdn.microsoft.com/en-us/library/bb397781.aspx
如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)
| 归档时间: |
|
| 查看次数: |
49724 次 |
| 最近记录: |