【问题标题】:Why would the same DateTime value yield different displayed time for different users?为什么相同的 DateTime 值会为不同的用户产生不同的显示时间?
【发布时间】:2012-09-20 03:28:20
【问题描述】:

在我的 ASP.NET 应用程序中,我使用代码 from here 来查找应用程序的构建日期为 UTC。然后从汇编文件中读取的 UTC 值格式化如下:

//DateTime time    
return time.ToString("dd MMM yyyy HH:mm:ss");

现在一个用户打开该应用程序提供的页面并看到

28 сен 2012 04:13:56

并通知打开同一页面并看到的其他用户

27 Sep 2012 12:14:32

这两个请求都由同一个应用程序处理,该应用程序部署用于从同一个包中清理 Windows Azure VM,因此为两个用户运行的代码肯定是完全相同的。

显然,由于来自不同用户的请求的本地化不同,字符串的格式也不同。一位用户看到月份显示为Sep,另一位用户看到月份显示为сен(相当于俄语中的Sep)。

为什么时间不同?它们是否也根据某些依赖本地化的时区进行调整?

【问题讨论】:

  • 嗯,是的,它们是:日期和时间不同:显然,9 月 28 日在俄罗斯是凌晨 4 点,在其他地方是 9 月 27 日的 12 点(当然在地球西部)。 ..但奇怪的是分钟/秒不应该改变

标签: c# asp.net .net localization timezone


【解决方案1】:

最明显的解释是DateTime 的值实际上是不同的。

您链接的代码使用GetCallingAssembly,您应该注意MSDN says

如果调用 GetCallingAssembly 方法的方法被实时 (JIT) 编译器内联扩展,或者如果它的调用者被内联扩展,则 GetCallingAssembly 返回的程序集可能会意外不同

为了调试它,我首先显示time.Tickstime.Kind:如果它们相同,你就知道这是一个显示问题。如果它们不同,你需要看看你是如何产生时间价值的。

【讨论】:

  • 是的,就是这样。调用读取时间戳的函数的代码位于实际部署时预编译的 .aspx 中。因此,取决于调用是否内联,它将是构建时间还是 ASP.NET 预编译时间。
  • 以下是禁用特定函数内联的方法:stackoverflow.com/a/5169272/57428
猜你喜欢
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多