运行自定义“时钟”/ 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
而不是Reset
和Start
。 DateTime
是 struct
,不能是 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#的主要内容,如果未能解决你的问题,请参考以下文章