gpt4 book ai didi

c# - .Net 日期时间精度

转载 作者:行者123 更新时间:2023-11-30 15:48:49 27 4
gpt4 key购买 nike

在我的 .net 域对象中,我正在跟踪每个状态转换。这是通过将状态集放入状态历史集合来完成的。所以稍后,可以看到一个 desc 有序列表,以找出哪个状态在什么时间发生了变化。

于是就有了这样的方法:

private void SetState(RequestState state)
{
var stateHistoryItem = new RequestStateHistoryItem(state, this);

stateHistoryItems.Add(stateHistoryItem);
}

当实例化一个新的RequestStateHistoryItem 时,会自动分配当前日期。像这样:

protected IdentificationRequestStateHistoryItem()
{
timestamp = EntityTimestamp.New();
}

EntityTimestamp 对象是包含适当用户以及创建和更改日期的对象。

在列出状态历史记录时,我使用 Linq 进行降序排列:

public virtual IEnumerable<RequestStateHistoryItem> StateHistoryItems
{
get { return stateHistoryItems.OrderByDescending(s => s.Timestamp.CreatedOn.Ticks); }
}

现在,当一个新的 Request 被实例化时,第一个状态 Received 被设置在构造函数 SetState(RequestState.Received) 中。然后,在没有任何延迟的情况下,根据某些条件,设置新状态 Started。一段时间后(数据库操作)状态 Finished 被设置。

现在执行降序时,Received 总是在 Started 状态之后。当我调试缓慢时,或者在将状态设置为 Started 之前放置 System.Threading.Thread.Sleep(1000) 时,排序有效。如果不是,如上所述,Started 状态的 CreatedOn 比 Received CreatedOn 日期更早?!

TimeOfDay   {17:04:42.9430318} FINSHED
Ticks 634019366829430318

TimeOfDay {17:04:39.5376207} RECEICED
Ticks 634019366795376207

TimeOfDay {17:04:39.5367815} STARTED
Ticks 634019366795367815

怎么可能呢?如果接收日期和开始日期完全相同,我会理解,但我不明白它怎么可能比另一个早?

我已经尝试过 new DateTimePrecise().Now,(参见 DateTimePrecise class )我在另一个问题中找到了。相同的结果。

有人知道那是什么吗?

更新

public virtual bool Finish()
{
// when I put the SetState(State.Received) from the constructor into here, the timestamp of finish still is BEFORE received
SetState(IdentificationRequestState.Received);
SetState(IdentificationRequestState.Finished);

// when I put the SetState(State.Received) after Finished, then the Received timestamp is BEFORE Finished
SetState(IdentificationRequestState.Finished);
SetState(IdentificationRequestState.Received);

var match = ...

if (match != null)
{
...
}
else
{
...
}
}

最佳答案

DateTime.Now 不精确到毫秒。它仅以较大的间隔更新,例如 30 或 15 毫秒(这正是 Window 内部时钟的工作方式,IIRC)。

System.Diagnostics.Stopwatch 是一种更准确的测量时间时差的方法。它还没有 UTC 到本地时间转换等的开销。DateTimePrecise 类结合使用 DateTime 和 Stopwatch 来提供比 DateTime.Now 更准确的时间。

关于c# - .Net 日期时间精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2274461/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com