C# : 根据开始日期和 Months/Fortnights 的数量,计算适当的日期
C# : Based on a start date and number of Months/Fortnights, calculate the appropriate dates
我有一个给定开始日期和结束日期之间的日期列表,这些日期可以是月末日期,也可以是每个月的 15 日。我想过滤掉所有以 15 号开始的日期。有什么办法可以在 C# 中实现吗?
我正在考虑将数据集中的所有日期转换为字符串并遍历列表和 运行 一个正则表达式(我需要帮助),它将从中删除以 15 开头的日期列表。有没有更好的方法来解决这个问题?
对于措辞不当的问题深表歉意。这就是我们想要做的。
给定一个开始日期,如果我们想根据 Monthly/Fortnightly 计算之前的日期,我们有一个 drop-down 到 select。每月日期必须始终是月末日期,每两周的日期必须是 15 日。以下是计算这个的代码。
参数:
dtAsOnDate 是开始日期
区间是 Monthly/Fortnightly
numberOfIntervals 是我们需要返回的 Months/Fortnights 的数量。
例如,如果我 select 2020 年 3 月 31 日作为我的开始日期,每两周作为我的间隔,3 作为我的间隔数,代码现在 returns 15-Feb- 2020(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();
}
我有一个给定开始日期和结束日期之间的日期列表,这些日期可以是月末日期,也可以是每个月的 15 日。我想过滤掉所有以 15 号开始的日期。有什么办法可以在 C# 中实现吗?
我正在考虑将数据集中的所有日期转换为字符串并遍历列表和 运行 一个正则表达式(我需要帮助),它将从中删除以 15 开头的日期列表。有没有更好的方法来解决这个问题?
对于措辞不当的问题深表歉意。这就是我们想要做的。 给定一个开始日期,如果我们想根据 Monthly/Fortnightly 计算之前的日期,我们有一个 drop-down 到 select。每月日期必须始终是月末日期,每两周的日期必须是 15 日。以下是计算这个的代码。
参数: dtAsOnDate 是开始日期 区间是 Monthly/Fortnightly numberOfIntervals 是我们需要返回的 Months/Fortnights 的数量。
例如,如果我 select 2020 年 3 月 31 日作为我的开始日期,每两周作为我的间隔,3 作为我的间隔数,代码现在 returns 15-Feb- 2020(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();
}