【问题标题】:Date and time library with period support for C#/VB.NET?支持 C#/VB.NET 的日期和时间库?
【发布时间】:2011-04-14 16:24:45
【问题描述】:

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

如果我有一组两个时间段(这可以是多个)

设置:

// [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

其他更高级的设置功能是加分项。

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

【问题讨论】:

  • 也许某些第 3 方调度/日历控件具有这样的功能...

标签: c# .net vb.net


【解决方案1】:

【讨论】:

  • 我没有测试过这个库,但是这个库似乎有我想要的功能。谢谢。
【解决方案2】:

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

您可以在 codeproject 上使用 quite a few helper extensions,例如 AddBusinessDay 方法,也可以提供帮助。

在解析您所拥有的格式方面 - 您可能希望将其更改为流畅的界面,以加快开发/测试速度并省去编写复杂的令牌解析类的麻烦。您可以将其保留为 Cron 格式,以使 Quartz 代码更容易集成,除非它被非技术人员使用。

【讨论】:

  • Quartz 类看起来很有希望,因为解析日期存储在数据库中。
【解决方案3】:

您可以使用通用的DateTime 结构。它有 用于比较两个 DateTime 的运算符,例如少于。因此 集合操作和范围检查功能是 为此在一个简单的类中实现相当简单 目的。

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

【讨论】:

  • 我创建了自己的(使用 DateTime)。如果我将每个时期定义分成几个“日期范围”,我最终会得到很多范围 - 1 月 1 日至 12 月 31 日 14:00-15:00 的 365-366 个范围。
  • 好的,我明白了。这不是一个有效的表示,但它应该仍然有效。会不会是浮点舍入问题?例如。 14.00 可能与 13.00 + 1 小时不同。 ——
【解决方案4】:

看看TimeSpan 结构

【讨论】:

  • TimeSpan 结构对我有何帮助?
猜你喜欢
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
相关资源
最近更新 更多