簡體   English   中英

使用 LINQ 查詢計算兩個日期之間的剩余天數

[英]Calculate number of days left between two dates using LINQ query

我有一個解決方案,可以打印從今天到 2021 年 8 月 14 日的日期列表(星期五),它還打印到 2021 年 8 月 14 日的剩余天數,這是我在不同的功能中所做的,如何在一個 LINQ 查詢將打印日期並打印剩余天數。 這是我的代碼;

 static void Main()
    {
        var dates = new List<DateTime>();

        DateTime from = DateTime.Today;

        DateTime to = new DateTime(2021, 08, 14);

        double dayLeft = to.Subtract(DateTime.Today).TotalDays;

        //var to = DateTime.Today.AddDays(14); 

        for (var dt = from; dt <= to; dt = dt.AddDays(1))
        {
            dates.Add(dt);
        }

        var allFridays = dates.Where(x => (int)x.DayOfWeek == 5);





        Console.WriteLine(string.Join(Environment.NewLine, allFridays));
        Console.WriteLine("Days Left are in Independence are : " + dayLeft);


        Console.ReadKey();
    }

我認為不可能在 1 Linq 查詢中實現這一點。

如果您真的想使用 Linq,您可以這樣做

DateTime from = DateTime.Today;

DateTime to = new DateTime(2021, 08, 14);

var mydates = Enumerable.Range(0, to.Subtract(from).Days).Select(x => from.AddDays(x));

Console.WriteLine(string.Join(Environment.NewLine, mydates.Where(x=> (int)x.DayOfWeek == 5)));
Console.WriteLine("Days Left are in Independence are : " + mydates.Count());

請記住,可讀性非常重要,因此 Linq 並不總是最好的(在某些情況下也不是最快的)。
唯一應該忽略的時間可讀性是,如果您對執行有時間限制並且軟件在時間范圍內完成。

首先計算這兩個日期之間的總天數,然后使用Enumerable 枚舉

var difference = (to.Date - from.Date).TotalDays;
var dates = Enumerable.Range(0, (int)difference).Select(day => from.AddDays(day));

或者你可以在沒有LINQ的情況下使用foreach

var dates = new List<DateTime>();
for(var i=0; i<difference; i++)
{
     dates.Add(from.AddDays(i));
}

我不確定我是否理解你......,但似乎你想返回所有星期五和直到某個日期的日期計數。

我建議像這樣創建 class :

public class FridaysToDate
{
    private DateTime startDate;
    private DateTime endDate;
    private DateTime firstFriday;
    private int daysLeft = 0;
    
    public FridaysToDate(DateTime _start, DateTime _end)
    {
        startDate = _start;
        endDate = _end;
        daysLeft = (int)(endDate - startDate).TotalDays;
        firstFriday = NearestFriday(_start);
    }

    private DateTime NearestFriday(DateTime initialDate)
    {
        int daysToFriday =  ((int) DayOfWeek.Friday - (int) initialDate.DayOfWeek + 7) % 7; 
        return initialDate.AddDays(daysToFriday);
    }   
    
    public List<DateTime> AllFridays
    {
        get => Enumerable.Range(0, (int)((daysLeft)/7)+1)
            .Select((x, y)=> firstFriday.AddDays(y*7))
            .ToList();
    }
    
    public override string ToString()
    {
        return $"Until '{endDate.ToString("yyyy-MM-dd")}' left {daysLeft} days(s), including {AllFridays.Count} fridays.";
    }
    
}

用法:

FridaysToDate ftd = new FridaysToDate(DateTime.Today, new DateTime(2021, 08, 14));
List<DateTime> fridays = ftd.AllFridays;
//you can use the list of fridays now
Console.WriteLine(ftd.ToString());

暫無
暫無

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

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