首页 > 解决方案 > 使用与本地机器不同的时间

问题描述

我有一个在 Windows 服务器上运行的 C# 应用程序。但是该服务器的时间不正确(时区很好)。

如何强制我的 C# 进程以 DateTime.Now 将返回实时但不更改本地机器时间的方式将自身同步到时间服务器。

我无法更改代码中使用的所有“DateTime.Now”,因为太多了。此外,还有一些外部 .net DLL 需要使用相同的 DateTime 值。

标签: c#

解决方案


如何强制我的 C# 进程以 DateTime.Now 将返回实时但不更改本地机器时间的方式将自身同步到时间服务器。

你不能:

DateTime.Now财产

获取一个 DateTime 对象,该对象设置为此计算机上的当前日期和时间,以本地时间表示。

在内部,在 Windows 上,这会调用GetSystemTimeAsFileTime()orGetSystemTimePreciseAsFileTime()函数。换句话说,你不能轻易地规避DateTime.Now返回机器的时间。

当然,使用detoursMoles(在 VS2012 中被 Fakes 和 VS2015 中的 IntelliTest 取代 [需要企业许可证],但请参阅VS 2008/2010 下载),您可以重新路由这些 Windows API 或 .NET API 调用,但您通常不会不想。

而是要求服务器所有者使用 NTP 设置适当的时间同步。


推荐阅读