我遇到了通过Citrix服务器在远程位置运行的应用程序的问题.当应用程序在远程位置运行时,即使用户通过Citrix访问应用程序,它也会使用远程位置的时间将事件记录到数据库.
.NET的DateTime.Now是否以某种方式"逃离"Citrix容器并找到远程计算机的时间或是否有其他解释?
这是应用程序的当前设置.
PS应用程序已更新,以便在将来保存时从数据库中查询时间.
一些东西:
Citrix的"时区重定向"功能可能是您观察到的内容的解释.详细信息特定于您使用的特定Citrix产品(您未提供).您可以禁用该功能.谷歌,或在ServerFault上询问.
实际上,您应该避免DateTime.Now在基于服务器的应用程序中使用.与服务器的时区设置无关.根据需要使用DateTime.UtcNow,, DateTimeOffset.UtcNow或DateTimeOffset.Now与TimeZoneInfo课程一起使用.或者,使用Noda Time.
要回答标题中的问题,您可以在DateTime.Now 此处查看源代码.它的工作原理如下:
调用DateTime.UtcNow,它本身调用GetSystemTimeAsFileTimeWin32 API.这是系统时钟.它是UTC的 - 不是任何特定的时区.如果您在VM中运行,通常此系统时钟将与主机的时间同步.
获取有关本地计算机时区的数据.它使用完整时区的截断版本(出于性能原因),并缓存数据以供将来重用.
请注意,如果Citrix重定向时区,则会影响此步骤.
使用检索到的数据,计算UTC的偏移量 - 针对步骤1中检索到的特定UTC点.
应用偏移量获取本地时间,如果截断MinTicks或MaxTicks在转化率超过.
用步骤4标记在步骤4中计算的值DateTimeKind.Local,并在DateTime结构中返回它.
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |