从特定的DateTime将给出实时

瓦拉基克

会员
已加入
2020年11月8日
留言内容
9
编程经验
Beginner
您好
我在Google上找不到任何信息,该如何执行以下操作:
-我通过API从服务器端获取服务器时间。当窗体完全加载时,我在DateTime中加载了一次。
-但是从那时起我不知道应用程序将如何使用该DateTime作为正常日期和时间。我的意思是,该应用不会使用PC上的本地时间,而是使用服务器时间。
-我不想每次都请求服务器端的实时时间是每1秒一次,因为长期连接到网络服务器后这会很麻烦,所以我想如果PC将获得一次服务器时间,从那时开始使用该时间并正常工作作为正常时钟。

我尝试了一下,并以100个间隔插入了一个计时器,但甚至没有移动数字:

C#:
DateTime something = new DateTime((int)stuff.year, (int)stuff.month, (int)stuff.day, (int)stuff.hour, (int)stuff.minutes, (int)stuff.seconds);
var test = something.AddSeconds(1);

如何使特定DateTime的应用程序具有正常的日期和时钟功能?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
假设本地PC和服务器每天至少与NTP服务器同步一次,则本地PC和服务器都具有正确的UTC时间,且时差可以忽略不计。默认情况下,所有现代Windows操作系统都默认执行NTP同步,并且必须明确将其关闭。您甚至不必询问服务器它认为现在几点。您只需要问它在哪个时区即可。

还要考虑如果您要求服务器提供时间,而不是合理地假设机器已同步,则必须解决的问题类型:在您请求时间与返回响应之间存在时滞。您将需要考虑该延迟。要解决该问题,您需要基本上重新实现已经解决此问题的NTP协议的某些部分。
 
Last edited:

瓦拉基克

会员
已加入
2020年11月8日
留言内容
9
编程经验
Beginner
在我看来,这只是一个简单的家长控制应用程序,因此孩子们不会在我的家里使用计算机。
孩子们很聪明地更改了在PC上的时间,以欺骗使用笔记本电脑的可用时间。
因此,因此我想以这种方式让网络服务器将服务器时间分配给C#应用程序,并且该应用程序将使用该信息。
例如,时间为15:00:00,C#应用程序获取该信息。我希望该应用程序从15:00:00开始计时,因此我不需要每秒钟从API请求一次。
因此,从API加载1次后,C#将继续加载,例如15:00:01 15:00:02 15:00:03,依此类推。
但是问题是我不知道该怎么做。
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,028
地点
挪威
编程经验
10+
您可以使用秒表来测量时间,您可以随时添加之前给定的服务器时间以及从手表经过的时间,以获取当前时间。
C#:
var timeNow = serverTime + watch.Elapsed;
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
此外,如果他们足够聪明以更改时间,那么他们足够聪明以仅终止您的过程。
 

瓦拉基克

会员
已加入
2020年11月8日
留言内容
9
编程经验
Beginner
谢谢你的回答。有用。 :)
关于您的最后一条评论,解决方案是为他们提供一个没有管理员权限但具有用户权限的帐户。
当然,通过这种方法,他们可以关闭该应用程序,但是我将提供一项服务,该服务将检查该应用程序是否正在运行。如果他们想禁用该服务以停止检查,则Windows最终将询问管理员权限。
因此,如果他们成功关闭了该应用程序,则该服务将自动启动该应用程序,并且一切正常。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
最佳 底部