【问题标题】:ASP.NET DateTime.Now wrong TimeASP.NET DateTime.Now 时间错误
【发布时间】:2018-06-15 16:20:26
【问题描述】:

调用 DateTime.Now 时出现奇怪的结果 所以,我做了以下 .apsx 并在服务器上执行。

<%@ Import Namespace="System.Globalization.CultureInfo" %>

<%
    System.Globalization.CultureInfo.CurrentCulture.ClearCachedData() 
%>

<%= DateTime.UtcNow %>
<br>
<%= DateTime.Now %>
<br>
<%= TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now) %>
<br>
<%= DateTime.Now.IsDaylightSavingTime() %>
<br>
<%= TimeZone.CurrentTimeZone.StandardName %>
<br>
<%= TimeZone.CurrentTimeZone.DaylightName %>
<br>
<%= TimeZoneInfo.Local.Id %>

结果如下:

10/01/2018 13:32:58 
10/01/2018 10:32:58 
-02:00:00 
False 
E. South America Standard Time 
E. South America Daylight Time 
E. South America Standard Time

为什么 DateTime.Now 返回 -03:00:00 而不是 -02:00:00 时间? 为什么 IsDaylightSavingTime 返回 false,但应该是 True?

【问题讨论】:

  • 我猜这与夏令时有关。我认为 timezone.currenttimezone 对象上有一个 IsDaylightSavings 标志或其他东西,可以判断是否是这种情况
  • 事实上,这是一种将日期时间对象传递给的方法
  • 这听起来不太可能是 ASP.NET 问题。您可以在小型控制台应用程序中重现它吗? (除此之外,这更容易使用。)
  • 我的猜测是 TimeZone 使用的是 Windows 时区数据库的一个版本,但 TimeZoneInfo 不知何故使用了不同的版本。 TimeZoneInfo.Local.Id 返回什么?
  • (总的来说,我肯定会避免使用TimeZone,顺便说一句。TimeZoneInfo 要好得多 - 尽管我个人更喜欢使用我的 Noda Time 库:)

标签: c# asp.net datetime


【解决方案1】:

尝试DateTimeOffset.Now 而不是DateTime.Now。它将正确报告与 UTC 的偏移量 (DateTimeOffset.Now.Offset)。

它不支持 DST,请使用 TimeZoneInfo。

您将不断遇到DateTime 和任何有关时区的问题。

【讨论】:

    猜你喜欢
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多