代码之家  ›  专栏  ›  技术社区  ›  Erwin

日期和时间库,支持c 35;/vb.net周期?

  •  3
  • Erwin  · 技术社区  · 17 年前

    我正在寻找一个图书馆做设置操作的时间段与支持的工作日和一天中的时间。我已经开始自己动手了,但这似乎是一个容易出错的工作,所以我想为这个测试解决方案。我不介意花钱。

    如果我有两个时间段的集合(这可以是几个)

    设置:

    // [period 1]:
    TimeSet.Add(1 January 2008-31 January 2008 every Tuesday 14:00-15:00) 
    // [period 2]
    TimeSet.AddWithOr(1 January 2008-15 January 2008 every Tuesday 13:00-14:00) 
    

    结果:

    TimeSet.ContainsTime(2 January 2008 13:45) = False
    TimeSet.ContainsTime(2 January 2008 14:15) = True // [period 1]
    TimeSet.ContainsTime(2 January 2008 13:15) = True // [period 2]
    

    我还需要范围检查功能:

    // Only Tuesday 13-15 is in range:
    TimeSet.ContainsTime(24 December 2007 13:45,1 January 2008 13:00) = False
    TimeSet.ContainsTime(24 December 2007 13:45,2 January 2008 12:59) = False 
    TimeSet.ContainsTime(24 December 2007 13:45,2 January 2008 13:00) = True
    

    其他更高级的集合函数是一个加号。

    我试过谷歌搜索,但找不到任何东西。

    4 回复  |  直到 15 年前
        2
  •  1
  •   Chris S    17 年前

    我不知道作为C/.NET框架存在的任何东西,但是您可能能够适应 Quartz project's (c调度程序)日历命名空间。这包括 CronCalendar 对象。我没用过 cron 有一段时间,但我记得它支持你所经历的那种发生系统。

    有 quite a few helper extensions 你可以在codeproject上使用,比如 AddBusinessDay 也可能有帮助的方法。

    就解析格式而言,您可能希望将其更改为一个流畅的接口,以使开发/测试更快,并省去编写复杂的令牌解析类。您可以将它保存为cron格式,以使quartz代码更易于集成,除非没有技术人员使用它。

        3
  •  0
  •   Peter Mortensen Pieter Jan Bonestroo    17 年前

    你可以使用通用的 DateTime 结构。它有 比较两个日期时间的运算符,例如lessthan。因此 set操作和范围检查功能是 在一个简单的类中实现这个非常简单 目的。

    此类中的中心数据结构可以是一个列表 按开始时间排序的日期时间范围的。如果新的日期时间 添加范围,然后将其与现有日期时间合并 范围(如果有重叠)。如果它与 他们需要浏览一下新的列表,看看是否有 日期时间范围现在重叠(然后需要合并)。 重复此操作,直到不再有重叠。

        4
  •  -2
  •   Martin    17 年前

    看看 TimeSpan 结构

    推荐文章