我需要模拟一个相当精确的时钟。我需要某种DateTime.Now,不是本地时间,而是Web服务器的时间(可能与系统时间相差几秒)。
事情是我需要准确,即使3秒也是太过分了。 有没有办法创建一个DateTime对象,然后“让它运行”,以便它显示当前的服务器时间?
PS:不是说时间服务器,而是普通的Web服务器。我可以避免将系统时间设置为服务器时间吗?
答案 0 :(得分:2)
DateTime.Now
不是很准确,尤其不适用于测量时差。 »让它运行«建议你实际上想要使用Stopwatch和单独的DateTime
作为开始时间。然后,您只需添加Stopwatch
的开始时间和已用时间即可生成当前时间戳。
答案 1 :(得分:0)
所以这就是我想出来的:
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。 我可能永远不会在它被设置之前调用它,但是一如既往:不要相信你自己的代码。