我有string[] WeekDayNames
代表工作日名称数组(如“星期一”,“星期三”)
我需要在WeekDayNames中为特定日期范围的所有日期名称设置日期。 示例:2013年11月19日至2013年11月28日周三的日期:2013年11月20日和2013年11月27日
谢谢!
答案 0 :(得分:2)
你可以通过简单的循环来实现:
DateTime startDate = new DateTime(2013, 11, 19);
DateTime endDate = new DateTime(2013, 11, 28);
List<DateTime> list = new List<DateTime>();
while (startDate <= endDate)
{
if (startDate.DayOfWeek == DayOfWeek.Wednesday)
{
list.Add(startDate);
}
startDate = startDate.AddDays(1);
}
如果使用DayOfWeek
枚举而不是存储字符串值,则效果更好。
如果您想获得字符串数组WeekDayNames
的每个元素的日期,那么:
DateTime startDate = new DateTime(2013, 11, 19);
DateTime endDate = new DateTime(2013, 11, 28);
string[] WeekDayNames = new[] { "Wednesday" };
List<DateTime> list = new List<DateTime>();
while (startDate <= endDate)
{
if (WeekDayNames.Any(r=> r== startDate.DayOfWeek.ToString()))
{
list.Add(startDate);
}
startDate = startDate.AddDays(1);
}
答案 1 :(得分:2)
首先,我会将您的字符串转换为真实的DayOfWeek
...
string[] WeekDayNames = new[] { "Monday","Wednesday" };
DayOfWeek[] days = WeekDayNames
.Select(s => (DayOfWeek)Enum.Parse(typeof(DayOfWeek), s))
.ToArray();
DateTime start = new DateTime(2013, 11, 19);
DateTime end = new DateTime(2013, 11, 28);
...然后你可以使用这个LINQ查询:
IEnumerable<DateTime> range = Enumerable.Range(0, (end - start).Days + 1)
.Select(d => start.AddDays(d))
.Where(dt => days.Contains(dt.DayOfWeek));