C#-获取两次约会之间的天数

本文关键字:之间 约会 两次 获取 C#- | 更新日期: 2023-09-27 18:09:33

我的案例场景是用户选择一个财政年度,例如2015年1月1日至2015年12月31日。然后他选择日期,比如"星期六"、"星期四"。

我想获取上述条件之间的所有日期。

我可以得到这样的日期:-

    ....
    for (var date = fromDate; date <= toDate; date = date.AddDays(1))
         temp.Add(date);        

但是如何从日期范围中只获得"星期六"answers"星期日"?

C#-获取两次约会之间的天数

使用DayOfWeek属性:

 for (var date = fromDate; date <= toDate; date = date.AddDays(1))
 {
     if (date.DayOfWeek == DayOfWeek.Sunday || date.DayOfWeek == DayOfWeek.Saturday) 
            temp.Add(date);
 }

如果一周中的天数不是静态的:

HashSet<DayOfWeek> daysOfWeek = new HashSet<DayOfWeek> { DayOfWeek.Saturday, DayOfWeek.Sunday };
List<DateTime> temp = new List<DateTime>();
for (var date = fromDate.Date; date <= toDate; date = date.AddDays(1))
    if (daysOfWeek.Contains(date.DayOfWeek))
        temp.Add(date);
var fromDate = new DateTime(2015, 1, 1);
var toDate = new DateTime(2015, 2, 15);
var dates = Enumerable.Range(0, (int)(toDate - fromDate).TotalDays + 1)
    .Select(i => fromDate.AddDays(i))
    .Where(i => i.DayOfWeek == DayOfWeek.Saturday || i.DayOfWeek == DayOfWeek.Sunday);

foreach(var date in dates)
{
    Console.WriteLine("{0:yyyy-MM-dd ddd}", date);
}

.Net fiddle

循环很简单,可以完成任务,但Linq更有趣。

但是@Eric:为什么要挂国旗?您可以直接选择工作日:

DateTime fromDate = new DateTime(2015, 1, 1);
DateTime toDate = new DateTime(2015, 2, 15);
DateTime[] dates = Enumerable.Range(0, (int)toDate.Subtract(fromDate).TotalDays + 1)
    .Select(i => fromDate.AddDays(i))
    .Where(i => (i.DayOfWeek == DayOfWeek.Monday || i.DayOfWeek == DayOfWeek.Sunday)).ToArray();

foreach(DateTime date in dates)
{
    Console.WriteLine("{0:yyyy-MM-dd ddd}", date);
}

您可以使用TimeSpan

timespan p = new timespan();
p = dt2-dt1;
MessageBox.Show(p.days.tostring());