运行 自定义 "clock" / DateTime.now c#
Run custom "clock" / DateTime.now c#
我需要模拟一个相当精确的时钟。我需要某种 DateTime.Now,不是本地时间,而是 Web 服务器的时间(可能与系统时间相差几秒)。
问题是我需要准确,即使是 3 秒也差太多了。
有什么方法可以创建 DateTime 对象然后 "let it run" 以便它显示当前服务器时间?
PS: 不是说时间服务器,而是普通的网络服务器。我可以避免将系统时间设置为服务器时间吗?
DateTime.Now
不是很准确,尤其不适合测量时差。 »让它 运行« 表明您实际上想要使用 Stopwatch 和单独的 DateTime
作为开始时间。然后,您可以通过添加您的开始时间和 Stopwatch
.
的经过时间来生成当前时间戳
这就是我想出的:
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();
}
不确定如何处理 ServerTime.Now 如果尚未设置 baseTime。
在它被设置之前我可能永远不会调用它 属性 ,但一如既往:不要相信你自己的代码。
我需要模拟一个相当精确的时钟。我需要某种 DateTime.Now,不是本地时间,而是 Web 服务器的时间(可能与系统时间相差几秒)。
问题是我需要准确,即使是 3 秒也差太多了。 有什么方法可以创建 DateTime 对象然后 "let it run" 以便它显示当前服务器时间?
PS: 不是说时间服务器,而是普通的网络服务器。我可以避免将系统时间设置为服务器时间吗?
DateTime.Now
不是很准确,尤其不适合测量时差。 »让它 运行« 表明您实际上想要使用 Stopwatch 和单独的 DateTime
作为开始时间。然后,您可以通过添加您的开始时间和 Stopwatch
.
这就是我想出的:
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();
}
不确定如何处理 ServerTime.Now 如果尚未设置 baseTime。 在它被设置之前我可能永远不会调用它 属性 ,但一如既往:不要相信你自己的代码。