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"星期日"?
使用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());