我有一个在Windows服务器上运行的C#应用程序。但是该服务器的时间不正确(时区很好)。
如何强制我的C#进程以DateTime.Now将返回实时但不更改本地机器时间的方式将自身同步到时间服务器。
由于太多,我无法更改代码中所有的'DateTime.Now'使用。此外,还有一些外部.net DLL需要使用相同的DateTime值。
答案 0 :(得分:1)
如何强制我的C#进程以DateTime.Now将返回实时但不更改本地机器时间的方式将自身同步到时间服务器。
您不能:
获取一个DateTime对象,该对象设置为此计算机上的当前日期和时间,表示为本地时间。
在Windows内部,这将调用GetSystemTimeAsFileTime()
或GetSystemTimePreciseAsFileTime()
函数。换句话说,您无法轻易规避DateTime.Now
返回机器的时间。
当然,可以使用detours或Moles(由VS2012中的Fakes和VS2015中的IntelliTest取代[需要企业许可证],但请参见the VS 2008/2010 downloads),您可以重新路由这些Windows API或.NET API调用,但是您通常不想这么做。
相反,请服务器所有者使用NTP设置适当的时间同步。