运行自定义“时钟”/ DateTime.now c#

Posted

技术标签:

【中文标题】运行自定义“时钟”/ DateTime.now c#【英文标题】:Run custom "clock" / DateTime.now c# 【发布时间】:2015-11-24 16:13:12 【问题描述】:

我需要模拟一个相当精确的时钟。我需要某种 DateTime.Now,不是本地时间,而是 Web 服务器的时间(可能与系统时间相差几秒钟)。

问题是我需要准确,即使 3 秒也相差太大。 有什么方法可以创建一个 DateTime 对象然后“让它运行”以显示当前服务器时间?

PS:不是说时间服务器,而是普通的网络服务器。我可以避免将系统时间设置为服务器时间吗?

【问题讨论】:

【参考方案1】:

DateTime.Now 不是很准确,尤其不能用于测量时差。 »让它运行«建议您实际上想使用Stopwatch 和单独的DateTime 作为开始时间。然后,您只需添加您的开始时间和 Stopwatch 的经过时间即可生成当前时间戳

【讨论】:

当然,您可以轻松地将其封装在 Clock 类中。 你能看看下面的ServerTime类吗?这就是我想出的。 @philn:有 codereview.stackexchange 可以解决这类问题。但在这种情况下:将其设为static class,将Stopwatch 设为readonly,使用Restart 而不是ResetStartDateTimestruct,不能是 null,所以改为 DateTime?。我可能会使用basetime + swatch.Elapsed 而不是Add 调用。【参考方案2】:

这就是我想出的:

public class ServerTime

    public static DateTime Now
    
        get
        
            if (baseTime != null)
                return baseTime.Add(swatch.Elapsed);
            else
                return DateTime.Now;
        
        set
        
            baseTime = value;
            swatch.Reset();
            swatch.Start();
        
    

    private static DateTime baseTime;
    private static Stopwatch swatch = new Stopwatch();


如果 baseTime 尚未设置,则不确定如何处理 ServerTime.Now。 我可能永远不会在设置之前调用这个属性,但一如既往:不要相信你自己的代码。

【讨论】:

以上是关于运行自定义“时钟”/ DateTime.now c#的主要内容,如果未能解决你的问题,请参考以下文章

C#如何写程序:“显示当前时间”

在 python shell 中运行一个基本的数字时钟

有没有办法在 Flutter 测试中伪造 DateTime.now() ?

C# 计算程序运行时间

C#DateTime.Now precision

C#DateTime的用法?