在 C# 中,如何检查日期是否是自 1990 年以来的每 5 天?

In C# how to check if date falls on every 5th day since 1990?

我需要检查日期是否在自 1990 年 1 月 1 日以来的第 5 天。

日期包括:

Jan 5, 1990,
Jan 10, 1990,
Jan 15, 1990,
Jan 20, 1990,
Jan 25, 1990,
Jan 30, 1990,
Feb 4, 1990,
Feb 9, 1990,

等等

该算法也必须在未来工作,所以我必须能够检查它是否是第 5 天,即使程序是 运行 两年后。

有什么解决这个问题的想法吗?

现在我正在迭代并向 1990 年添加 5 天,但这是很多不必要的循环。如果我的程序在 5 年内使用,那就是另一个 5 年的日期循环。

自 1990 年 1 月 1 日起每 5 天:

var is5thday=yourdate.Subtract(new DateTime(1990,1,1)).Days % 5 == 0;

但是,您的示例数据自 1989 年 12 月 31 日起每 5 天显示一次,因此:

var is5thday=yourdate.Subtract(new DateTime(1990,1,1)).Days % 5 == 4;

var is5thday=yourdate.Subtract(new DateTime(1989,12,31)).Days % 5 == 0;

试试这个:

public static bool checkDate(DateTime date)
{
    var start = new DateTime(1990, 1, 1);

    return (date - start.Date).Days % 5 == 4;
}

在 Linqpad 中测试:

void Main()
{
    checkDate(new DateTime(1990, 1, 5)).Dump();
    checkDate(new DateTime(1990, 1, 10)).Dump();
    checkDate(new DateTime(1990, 1, 15)).Dump();
    checkDate(new DateTime(1990, 1, 20)).Dump();
    checkDate(new DateTime(1990, 1, 25)).Dump();
    checkDate(new DateTime(1990, 1, 30)).Dump();
    checkDate(new DateTime(1990, 2, 4)).Dump();
    checkDate(new DateTime(1990, 2, 9)).Dump();
}

输出:







正确

总结从 1990 年开始的年份的总天数。

将该 SUM 与模 5 一起使用 SUM % 5 = 0

Jan 1, 1990 is Day 0. On Jan 1, 1990 it's been 0 days since Jan 1, 1990.

这是正确的,但是您的示例日期错过了一天:

DateTime initialDate = new DateTime(1990, 1, 1);
DateTime sampleDate = new DateTime(1990, 1, 6);
bool isDayOf5 = sampleDate.Subtract(initialDate).Days % 5 == 0;

// returns true