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