簡體   English   中英

C#:根據開始日期和月/兩周數,計算適當的日期

[英]C# : Based on a start date and number of Months/Fortnights, calculate the appropriate dates

我有一個給定開始日期和結束日期之間的日期列表,這些日期可以是月末日期,也可以是每個月的 15 日。 我想過濾掉所有以 15 號開始的日期。 C#有什么辦法可以實現嗎?

我正在考慮將數據集中的所有日期轉換為字符串並遍歷列表並運行正則表達式(我需要幫助)這將從列表中刪除以 15 開頭的日期。 有沒有更好的方法來解決這個問題?

為措辭不當的問題道歉。 這就是我們想要做的。 給定一個開始日期,如果我們想根據每月/每兩周計算之前的日期,我們可以下拉到 select。 每月日期必須始終是月末日期,每兩周的日期必須是 15 日。 以下是計算它的代碼。

參數: dtAsOnDate 是開始日期間隔是每月/每兩周 numberOfIntervals 是我們需要返回 go 的月數/雙周數。

例如,如果我 select 2020 年 3 月 31 日作為我的開始日期,每兩周作為我的間隔,3 作為我的間隔數,代碼現在返回 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();

        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM