c# - C#:根据开始日期和月/两周数,计算适当的日期
问题描述
我有一个给定开始日期和结束日期之间的日期列表,这些日期可以是月底日期或每个月的 15 日。我想过滤掉所有从 15 日开始的日期。有没有办法在 C# 中实现这一点?
我正在考虑将数据集中的所有日期转换为字符串并遍历列表并运行正则表达式(我需要帮助),这将从列表中删除以 15 开头的日期。有没有更好的方法来解决这个问题?
解决方案
为措辞不当的问题道歉。这就是我们想要做的。给定开始日期,我们有一个下拉菜单来选择是否要基于每月/每两周计算上一个日期。每月日期必须是月末日期,而每两周一次的日期必须是 15 日。以下是计算它的代码。
参数: dtAsOnDate 是开始日期 间隔是每月/每两周 numberOfIntervals 是我们需要返回的月数/两周数。
例如,如果我选择 2020 年 3 月 31 日作为开始日期,每两周一次作为我的间隔,3 作为我的间隔数,代码现在返回 2020 年 2 月 15 日(3 月 31 日之前的 4 个两周,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();
}
推荐阅读
- r - 在 R 的 ggplot 中为 x 轴标题添加位置偏移
- fullcalendar - 当事件被拖动或调整大小时,如何在 ToolTip 上进行时间更改?
- python - 用 0 替换值
- c# - DotNet CORE API - 如何防止正文中的附加属性
- c++ - 如何将命令行参数传递给 C++ DLL 的导出方法?
- c++ - Getline 采用整个文本而不是一行
- javascript - MomentJS 解析日期适用于两个日期,但第三个日期显示“无效日期”
- javascript - 如何在 for 循环中使用不同的值执行 Math.random()?
- postgresql - 如何通过通知获取插入/更新的行
- sql - 用连接中的最后一个可用值替换零值