首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时间间隔上的C++算法

问时间间隔上的C++算法
EN

Stack Overflow用户
提问于 2013-09-27 12:55:41
回答 1查看 568关注 0票数 1

我已经有了这方面的工作(丑陋)代码,但我还是要问:

我有工作日的时间间隔[09:15,10:00],[21:10,21:45]。给定时间t和若干秒s,如果t在间隔内,则必须计算t - s落入的日期和时间。

  • 例子:t= 20130913 21:15,s= 600,t-s下降到20130913 09:55.
  • 例子:t= 20130923 09:16,s= 120,t-s下降到20130920 21:44.

在C++中是否有一种干净的方法(boost::icl )?boost::date_time?)

我已经尝试过boost::icl,它当然可以保存interval_set<Time>中的时间范围,并找到某个Time所处的时间间隔,但是如果t - s时间点没有降到一个间隔范围内,我就看不出如何在该时间点之前找到最近的时间间隔,以及如何检测是否必须返回一天或整个周末。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-27 13:32:53

我认为这个问题太复杂,不可能有一个干净的解决办法,至少根据我对“清洁”的定义是这样的。

您将需要一个用于(不重叠)每日间隔的容器,有效地支持以下操作:

  • 找出特定的时间间隔属于哪一段时间,
  • 向后移动容器中的间隔,
  • 移动到最后一个间隔(按时间顺序排列)。

在我看来,boost::icl::interval_set<Time>是一个很好的解决方案。你的时间不需要记录日期,你可以把它分开。

您的算法将类似于:

代码语言:javascript
复制
let d and t be the date and time portions of your t
let i be the interval where t belongs
loop
   if t-s belongs in i then
      return t-s on day d
   else
      let j be the previous interval from i
      if j does not exist (because i was the first) then
         let j be the last interval
         move d one weekday backwards
      s := s - (t-start(i))
      t := end(j)
      i := j

这或多或少就是您所说的代码所做的事情。我不认为它会更干净。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19051334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档