Xamarin/C# - 在日期范围内查找周末的方法。为啥我陷入循环并且无法增加当前日期?
Posted
技术标签:
【中文标题】Xamarin/C# - 在日期范围内查找周末的方法。为啥我陷入循环并且无法增加当前日期?【英文标题】:Xamarin/C# - Method to find weekends in a date range. Why am I stuck in loop and unable to increment current date?Xamarin/C# - 在日期范围内查找周末的方法。为什么我陷入循环并且无法增加当前日期? 【发布时间】:2021-11-26 11:45:46 【问题描述】:问题:我的 Xamarin 项目中有一个页面,它接受两个用户输入的日期并检查该范围内的所有周六和周日,然后将所有这些日期添加到一个列表中,然后我可以计算并从一天的总数中扣除。当我运行第二个日期选择器时,屏幕将在大约一分钟后冻结并使应用程序崩溃。我的输出窗口给了我 LOS 溢出消息。当我在 'getWeekendCount()' 方法上设置断点时,我发现 AddDays(1) 方法没有增加 'date' 的值,并且似乎在循环同一日期,我认为这会导致溢出问题。
我不明白为什么会发生这种情况,希望能提供任何帮助。
public Calculator()
InitializeComponent();
//OnDateSelected(null, null);
dateFrom.SetValue(DatePicker.MinimumDateProperty, DateTime.Now);
dateTo.SetValue(DatePicker.MinimumDateProperty, DateTime.Now);
public int getWeekendCount(DateTime a, DateTime b)
List<DateTime> allDates = new List<DateTime>();
Console.WriteLine("Date From: " + a.Date);
Console.WriteLine("Date To: " + b.Date);
for (DateTime date = a.Date; date <= b.Date; date.AddDays(1))
if (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday)
allDates.Add(date);
Console.WriteLine(allDates);
int weekendCount = allDates.Count();
return weekendCount;
void OnDateSelected(object sender, DateChangedEventArgs e)
if(dateTo.Date < dateFrom.Date)
leaveDaysLabel.Text = "Days: Invalid Selection";
else if (dateTo.Date == dateFrom.Date)
leaveDaysLabel.Text = "Days: 1";
else
Console.WriteLine("Date From: " + dateFrom.Date);
Console.WriteLine("Date To: " + dateTo.Date);
int count = getWeekendCount(dateFrom.Date, dateTo.Date);
Console.WriteLine(count);
int days = (dateTo.Date - dateFrom.Date).Days - count;
leaveDaysLabel.Text = String.Format("Days: 0", days);
leaveHoursLabel.Text = "Hours: " + (days * 7.4).ToString();
【问题讨论】:
【参考方案1】:如果您检查AddDays
定义,您会发现它不会修改您的变量。只返回一个新日期。所以你的循环会永远持续下去
所以你应该改变你的循环。一个例子
while(a.Date <= b.Date)
if (a.DayOfWeek != DayOfWeek.Saturday && a.DayOfWeek != DayOfWeek.Sunday)
allDates.Add(a);
Console.WriteLine(allDates);
a = a.AddDays(1);
另外,也许您应该只在a
日期调用WriteLine
,而不是整个列表。或者在循环之后打印整个列表。
【讨论】:
或者在原来的for循环中,使用date = date.AddDays(1)以上是关于Xamarin/C# - 在日期范围内查找周末的方法。为啥我陷入循环并且无法增加当前日期?的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用bdate_range函数获取起始时间(start)和结束时间(end)范围内的所有周末日期(weekends day)