C# 将UTC日期时间转换为本地日期时间
我有以下ASP.Net MVC控制器方法:C# 将UTC日期时间转换为本地日期时间,c#,datetime,utc,C#,Datetime,Utc,我有以下ASP.Net MVC控制器方法: public ActionResult DoSomething(DateTime utcDate) { var localTime = utcDate.ToLocalTime(); } 问题是localTime的值与utcDate的值完全相同。我认为这是因为utcDate不知道它有UTC值。因此,我的问题是如何将utcDate(我知道是UTC)转换为本地?尝试以下方法: public static DateTime UtcToPacific(D
public ActionResult DoSomething(DateTime utcDate)
{
var localTime = utcDate.ToLocalTime();
}
问题是localTime的值与utcDate的值完全相同。我认为这是因为utcDate不知道它有UTC值。因此,我的问题是如何将utcDate(我知道是UTC)转换为本地?尝试以下方法:
public static DateTime UtcToPacific(DateTime dateTime)
{
return TimeZoneInfo.ConvertTimeFromUtc(dateTime, TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));
}
显然,将太平洋改为您当地的时区
如果您想了解您的机器上存在哪些时区,请参阅以下链接:如果您知道日期时间
包含UTC值,您可以使用:
例如,在我当前的应用程序中,我使用SQL的utcnow
在数据库中创建时间戳,但当我将它们读入我的C应用程序时,类的属性始终是未知的。我创建了一个包装函数来读取时间戳,故意将其种类设置为Utc
,然后将其转换为本地时间-基本上如上所述
请注意,仅当以下一项(或两项)成立时,才不会影响该值:
DateTime
的Kind
属性是DateTimeKind.Local
- 您的本地时区是这样的,“不改变”是正确的转换
我想我们可以假设第二点不是真的。因此,iKnowThisIsUtc
的Kind
属性似乎已经设置为Local
。您需要弄清楚为什么向您提供这些日期时间的任何东西都认为它们是本地的。或者:
var localTime = new DateTimeOffset(utcDate,TimeSpan.FromHours(0))
.ToLocalTime().DateTime;
如MSDN所述,您需要将日期的种类属性设置为UTC,以便ToLocalTime()工作(并将日期转换为本地时间)
试试这个:
utcDate = DateTime.SpecifyKind(utcDate, DateTimeKind.Utc);
var localTime = utcDate.ToLocalTime();
您知道您所在的时区吗?注意,ToLocalTime()
唯一不会更改该值的方法是运行时认为时间已经是本地时间。*(即它具有DateTimeKind.local
)您可能需要检查是否是这种情况,如果是,为什么您得到的日期被标记为Local
,即使它们不是。(*或者如果当地时间当然是UTC)如果我真的认为它是答案的一部分的话,我会认为它是答案的一部分。当我回过头来看这个问题的时候,我发现它非常混乱。你的回答的确解释得很好,但是一些例子可能会有帮助。当你给答案加上1的时候,也要考虑一下这个问题。如果你觉得有用的话。这个示例代码中的变量名非常完美。谢谢。
utcDate = DateTime.SpecifyKind(utcDate, DateTimeKind.Utc);
var localTime = utcDate.ToLocalTime();