如何解决C#:根据开始日期和月/两周数,计算适当的日期
我有给定开始日期和结束日期之间的日期列表,这些日期可以是月末日期,也可以是每月的15号。我想过滤掉所有从15日开始的日期。有什么方法可以在C#中实现?
我正在考虑将数据集中的所有日期转换为字符串,然后遍历列表并运行正则表达式(需要帮助),该正则表达式将从列表中删除以15开头的日期。有解决这个问题的更好方法吗?
解决方法
对措辞不佳的问题表示歉意。这就是我们想要做的。 给定开始日期,如果要基于每月/每两周计算先前的日期,则可以选择一个下拉菜单。每月日期必须始终是月份结束日期,而每两周日期必须始终是15日。以下是计算此代码的代码。
参数: dtAsOnDate是开始日期 间隔是每月/每两周一次 numberOfIntervals是我们需要返回的月/两周数。
对于一个实例,如果我选择2020年3月31日作为开始日期,选择每两周一次作为我的间隔,将3作为我的间隔数,则代码现在返回2020年2月15日(3月31日之前的两周,即3月31日)是第一个两周)
public static List<string> GetDate(DateTime dtAsOnDate,string interval,int numberOfIntervals)
{
DateTime currDate = dtAsOnDate;
DateTime startDate = currDate.AddMonths(-numberOfIntervals);
DateTime endDate = currDate;
Func<DateTime,bool> condition = null;
if (interval == "Monthly")
{
if (dtAsOnDate.Day == 15)
condition = date => date.Day == 15;
else
condition = date => date.Day == DateTime.DaysInMonth(date.Year,date.Month);
}
else
{
condition = date => date.Day == 15 || date.Day == DateTime.DaysInMonth(date.Year,date.Month);
}
return Enumerable.Range(0,(endDate - startDate).Days + 1)
.Select(index => startDate.AddDays(index))
.Where(condition)
.TakeWhile(date => date <= endDate)
.OrderByDescending(date => date)
.Take(numberOfIntervals)
.Select(date => date.ToString("dd-MMM-yyyy"))
.ToList();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。