在C#中,如何检查日期是否从1990年起每5天一次?
我需要检查日期是否在1990年1月1日之后的第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年内使用,那就
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