确定DateTime间隔接近度,并牢记以前的间隔

时间:2019-06-04 21:21:33

标签: c#

我需要找出一种方法来跟踪是否已按照既定的时间间隔执行任务,如果未执行则将其标记为“过期”。

例如,我需要每6个月对卡车进行一次维修。我跟踪上次服务的完成时间,并且服务可能在预定时间之前或之后的几天(或几周)发生。

我还没有开始编写代码,主要是因为需要将逻辑包裹在头上。

数据库存储了一个初始的相对参考时间(DateTime),时间间隔类型(可以是小时,天或月)以及满足该时间间隔的数字。

一个例子是:

  • 初始时间:2020年1月1日
  • 类型:月
  • 数:6

这意味着在2020年1月1日之后每6个月需要完成任务。

这样的想法是,如果完成服务,则该卡车将被标记为不需要维修,但是如果下一次服务尚未完成,则该卡车也将被标记。

2 个答案:

答案 0 :(得分:0)

您可以将最近的服务日期(LastServiced)存储为DateTime,并将MaxServiceInterval属性存储为TimeSpan类型。这将使您拥有一个计算后的属性NextService,该属性将返回前一个日期加上最大允许间隔。您还可以拥有一个IsOverdueForService属性,通过将下一个服务日期与当前日期进行比较来告诉您车辆是否应逾期维修。

使用上次服务日期的原因是,下一次服务日期应基于最近的服务,而不是初始服务。

public class ServiceSchedule
{
    public DateTime LastServiced { get; set; } = new DateTime(2019, 01, 01);
    public TimeSpan ServiceInterval { get; set; } = TimeSpan.FromDays(180);
    public DateTime NextService => LastServiced.Add(ServiceInterval);
    public bool IsOverdueForService => DateTime.Today > NextService;
}

答案 1 :(得分:0)

感谢您的投入!非常有帮助。

我最终要做的是(不要将自己束缚在将来可能会改变的时间表上),是在“完成”表中添加了一个附加列/字段,其中的DateTime标识了计划服务的时间戳。一旦完成,我可以根据时间表的要求从中计算出是否过期。

示例:

  • Schedule希望在1月1日开始提供服务。
  • 维护工作于1月4日进行。
  • 已完成维护的时间戳显示为第四。
  • 计划的列显示第一个。
  • 计算将查看Scheduled和AddMonths(6)(或由时间表定义),并将其与DateTime.Now进行比较。