【问题标题】:Find timestamp closest to one hour ago in a list在列表中查找最接近一小时前的时间戳
【发布时间】:2014-09-14 21:23:17
【问题描述】:

所以我有一个时间戳列表,它们不是均匀间隔的,这意味着一个时间戳可以是前一个时间戳之后的 10 分钟或之后的 5 秒。找到最接近 (DateTime.Now.TotalSeconds - 3600) 的条目索引的最佳方法是什么?

【问题讨论】:

  • 两个cmets: 1. timestamp 不是众所周知的类型。你的意思是DateTime 对象,还是你有用户定义的类型? 2. 将“一小时前”表示为:DateTime.Now.Subtract(TimeSpan.FromHours(1)); 可能更易读
  • 是的,对不起,我使用 DateTime.UtcNow - UnixEpoch 创建了一个我用作时间戳的 unix 时间戳

标签: c# list search


【解决方案1】:

由于您没有给出任何具体的代码,我们只能就此提出建议。

您可以做的,是获取列表中日期的绝对差值,并将其与所需日期进行比较,取最小值。

类似:

list.OrderBy( x => Math.Abs((x.Date - desiredDate).TotalMilliseconds)).FirstOrDefault();

【讨论】:

  • 在不订购列表的情况下有没有办法做到这一点?我想保持原来的顺序。我可以制作列表的副本,但列表有可能包含 17k 个条目:/
  • OrderBy 创建一个副本,因此它应该适合您的需要。
  • 另外,有17k的结果,在实际源中排序不是更容易吗?也许是一个数据库?
  • 它有潜力,但我已采取措施将列表保持在 4k 条目以下。该列表包含样本和时间戳。如果样本与列表中已有的样本匹配,则不会将其添加到列表中。此外,样本的频率是可调整的,因此如果所有 17k 样本都是唯一的并且每天每 5 秒采集一次样本,它只会创建 17k 条目。
  • 我用过这个IOrderedEnumerable<Sample> atest = _avgHalf.OrderBy(x => Math.Abs((x.Date - (DateTime.UtcNow - UnixEpoch).TotalSeconds - 3600))); 但是当我列出结果时,第一个结果比1小时前更远,更接近现在。 1410731677 然后 1410731664
猜你喜欢
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 2015-06-01
  • 2014-02-07
  • 2020-05-26
相关资源
最近更新 更多