Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在.NET中处理重复日期(仅限日期)?_.net_Date_Scheduling - Fatal编程技术网

如何在.NET中处理重复日期(仅限日期)?

如何在.NET中处理重复日期(仅限日期)?,.net,date,scheduling,.net,Date,Scheduling,我正试图找到一种处理.NET中重复事件的好方法,特别是针对ASP.NET MVC应用程序。其思想是,用户可以创建一个事件,并指定该事件可以在特定间隔后重复发生(例如,“每两周”、“每月一次”等等) 解决这个问题的最好办法是什么?我现在的头脑风暴是有两张表:Job和RecurringJob。作业是“主”记录,具有作业描述以及用于客户的密钥,而重复作业链接回作业,并具有关于发生频率(例如,“每月一次”)以及时间跨度(例如,“每周”、“每月”)的附加信息。问题是如何确定和设置作业的下一次发生,因为这必

我正试图找到一种处理.NET中重复事件的好方法,特别是针对ASP.NET MVC应用程序。其思想是,用户可以创建一个事件,并指定该事件可以在特定间隔后重复发生(例如,“每两周”、“每月一次”等等)

解决这个问题的最好办法是什么?我现在的头脑风暴是有两张表:Job和RecurringJob。作业是“主”记录,具有作业描述以及用于客户的密钥,而重复作业链接回作业,并具有关于发生频率(例如,“每月一次”)以及时间跨度(例如,“每周”、“每月”)的附加信息。问题是如何确定和设置作业的下一次发生,因为这必须定期进行。我看到了两种思路:这种逻辑要么存储在数据库列中并定期更新,要么在代码中动态计算

对解决这个问题有什么想法或建议吗

编辑:这是我正在创建的一个基于订阅的web应用程序,它可以让服务企业轻松地安排他们的常见重复性工作,并跟踪他们的客户。因此,典型的做法可能是每月为史密斯先生创建一份“修剪草坪”的工作。确切的日期并不重要,关键是客户能够看到史密斯先生每月都修剪草坪,并跟进此事

让我重新表述一下,以便更好地表达我的想法。应用程序的示例用例可能如下所示:

  • 用户调出John Smith的客户记录并单击添加作业链接
  • 用户填写表格,创建一个名为“割草”的作业,开始日期为2009年11月15日,并选中一个复选框,指示此作业持续进行。用户将看到一个二级屏幕,询问作业频率。用户表示(现在还没有决定如何进行-让我们假设选择列表)作业每月发生一次
  • 用户单击保存

现在,当用户查看John Smith的记录时,他们可以看到他有一份工作,“割草”,从2009年11月15日开始,每月都会发生。在主仪表板上,假设开始日期前一周,用户会看到显示的作业带有一个指示器,如“12/15/2009-修剪草坪(John Smith)”。在截止日期前一周,公司有人打电话给他,告诉他他要出城到2010年1月1日,所以他希望他的约会重新安排在那个日期。我们的用户可以将作业日期更改为2010年1月1日,现在重复将从该日期起一个月开始(例如,下一次将是2010年2月1日)。其背后的想法是,该应用程序针对的是草坪护理、水管工、地毯清洁工等企业,而这些企业的确切日期并不重要(因为随着人们的忙碌,它可能也将发生变化),关键是向企业提供史密斯先生的月度服务即将推出的指标,应该有人给他打个电话,确定具体什么时候可以安排。实际上,为这些企业提供了一种跟踪重复业务的方法,并知道何时该跟进客户。

将计划存储在数据库表或xml文件中是有意义的。主要是因为作业只能由asp.net应用程序计划。该事件必须由另一个应用程序触发—很可能是检查asp.net应用程序存储的配置的windows服务


至于表的结构,这实际上取决于您需要安排的具体内容——我想您真正需要的是用户id、作业id和在单个表中执行的日期。

您的规则可能会有多复杂?如果你能说服那些能让事情简单化的人,你的生活就会愉快得多:)你还应该让他们在各种测试情况下签字——如果某件事情计划每月30日发生一次,那么它是否会发生在2月份?至少通过使用日期(没有时间),你应该不用担心夏令时

您可能想查看或寻找其他针对.NET的iCal(RFC2445)实现,但判断库的质量可能很棘手,因为这是一个复杂的领域,包含大量的角落案例


在数据库方面,我会动态计算,除非这证明太痛苦。显然,您还必须在某个地方使用相同的“计算出下一个事件”代码,这样就消除了定期更新的复杂性。

我已经在数据库方面看到了这一点,让我告诉您,它变得非常丑陋

我建议建立一个能够处理重复事件的业务模型(即,根据业务模型进行动态计算)


至于数据库,你肯定需要存储与你的业务模型相关的数据,但是在这之上你应该考虑预测你的重复事件(可能长达一年左右),这将允许你的应用程序外部的使用能够使用你的事件。例如,如果你有一个报告系统,需要知道人们的日程安排,等等。

这是我之前考虑过的一个问题——虽然我还没有在现实世界中付诸实施,但你正在使用的要素如下:

  • 工作描述
  • 重复模式
  • 下一个预定事件
  • 作业/发生历史记录
到目前为止,很容易。这些是存储在数据库中的内容,是根据给定日期和业务逻辑中的重复模式计算“下一个”日期的方法

一般来说,客户的关键信息是下一次计划事件的列表,只要这些事件得到正确维护(您可以在