在C#中,如何检查日期是否从1990年起每5天一次?

在C#中,如何检查日期是否从1990年起每5天一次?,c#,date,date-arithmetic,days,C#,Date,Date Arithmetic,Days,我需要检查日期是否在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, 等等 该算法也必须在未来工作,所以我必须能够检查它是否是第五天,即使程序从现在开始运行2年 有没有办法解决这个问题 现在我正在迭代并在1990年的基础上增加5天,但这是很多不必要的循环。如果我的程序在5年内使用,那就

我需要检查日期是否在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,
等等

该算法也必须在未来工作,所以我必须能够检查它是否是第五天,即使程序从现在开始运行2年

有没有办法解决这个问题


现在我正在迭代并在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;

试试这个:

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年起各年的总天数相加

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

1990年1月1日是第0天。1990年1月1日,从1月1日到现在已经0天了, 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

并非所有月份的天数都相同。即使他们有,这也行不通still@M.kazemAkhgary它很好用。每五天一次。如果这是你认为他要求的,那么不是每个月的第五天OP应更新其回答,说明:1990年1月1日-1990年1月2日-1990年1月3日-1990年1月4日-1990年1月5日-第5日。1990年1月1日为第0天。1990年1月1日,自1990年1月1日以来已经0天了。我也这么认为,但唯一的区别(对于天)是TotalDays将返回一个双精度,分数部分代表部分天,而天是整数。@Robert,我坚持更正!多年来我一直在滥用TotalDays!我将删除我的评论。嗯,.Hours和.TotalHours等有很大的区别。只是因为几天来,没有更大的单位,它们基本上是一样的。请向上投票:)谢谢!谢谢实际上,我希望从第一天开始计数,每五天核实一次。所以1990年1月1日-第一天,1990年1月2日-第二天,1990年1月3日-第三天,1990年1月4日-第四天,1990年1月5日-第五天。这当然没关系-但作为第一天,1990-01-01也不是第0天。因此,您必须使用@Robert提供的最后两种方法之一。
DateTime initialDate = new DateTime(1990, 1, 1);
DateTime sampleDate = new DateTime(1990, 1, 6);
bool isDayOf5 = sampleDate.Subtract(initialDate).Days % 5 == 0;

// returns true