【问题标题】:Why is .ToLocalTime not converting UTC time to local time?为什么 .ToLocalTime 不将 UTC 时间转换为本地时间?
【发布时间】:2026-01-07 14:25:02
【问题描述】:

我的剃刀视图中有代码:

@Model.DateUpdated.ToLocalTime().ToString("dd/MM/yyyy HH:mm:ss")

在我的模型中,属性如下:

public DateTime DateUpdated { get; set; }

这是根据作为 UTC DateTime 存储在数据库中的日期填充的。

因此,当数据库中的时间返回为 01/01/2018 08:00 时,我希望它在视图中呈现为 01/01/2018 09:00 作为我的本地时间(我正在运行的机器这个)是UTC+1。

但是,它仍然是从数据库中检索到的原始时间。

如何将其转换为运行应用程序的服务器的时区?

【问题讨论】:

  • 网络服务器上的本地时间和您的本地时间一样吗?
  • ToLocalTime() 在该上下文中将是 Web 服务器的本地时间,而不是访问服务器的浏览器。
  • 我在我的问题中提到我正在我的机器上运行它(以及在我的机器上浏览它。)本地主机。我想先让它在那里工作:)

标签: javascript c# asp.net asp.net-mvc datetime


【解决方案1】:

在输出字符串之前,我建议记录 DateTimeKindDateUpdated 字段。

例如

Console.WriteLine(DateUpdated.Kind);

要确保 DateUpdated 字段实际上是 UTC,您可以尝试:

DateUpdated = new DateTime(DateUpdated.Ticks, DateTimeKind.Utc);

那么当你输出时,结果实际上应该是本地时间。

如果原始 DateUpdated 字段的 DateTimeKind 是 DateTimeKind.Local,则函数 .ToLocalTime() 将不起作用。当您从外部源加载 DateTime 时,可能会发生这种情况,例如数据库、解析等

如果 DateUpdated 字段的 .Kind 属性是 UTC 或未指定,则 ToLocalTime() 调用应按预期工作。

【讨论】:

  • 谢谢。有什么方法可以让我的 db DateTime 字段源自 UTC DateTimeKind?
  • 我建议只连接到从数据库加载日期的函数。我认为问题在于数据库日期通常不包含时区。
  • 我让它在本地工作,但是当部署到 Azure 时,它​​再次以 UTC 呈现时间-_-
  • 服务器时区是否可能是UTC?
  • 看起来应该是的,是的。我使用了 WEBSITE_TIME_ZONE 应用程序设置来指定我的时区 (GMT),这一切都可以正常工作,但是我被告知这不是 Azure 中的最佳实践,仅用于支持旧系统。所以我仍然不确定正确的方法是什么。我将开始另一个问题。
最近更新 更多