在c#中查找给定年,月和日名称的日期

时间:2016-03-12 08:54:21

标签: c# datetime

如果给出年,月和日,如何在c#中找到日期。

e.g。鉴于月份= 03,年份= 2016年。我需要找到星期六发生的日期。

预期产出[我们可以看到2016/03年度的星期六发生在以下日期]:
    2016年5月3日
    2016年12月3日
    19/03/2016
    26/03/2016

5 个答案:

答案 0 :(得分:3)

List<DateTime> saturdays = new List<DateTime>();
        for(int i=0;i<DateTime.DaysInMonth(year, month), i++)
        {
            DateTime dt = new DateTime(year, month, i);
            if (dt.DayOfWeek == DayOfWeek.Saturday)
                saturdays.Add(dt);
        }

答案 1 :(得分:1)

int year = 2016, month = 3;
DayOfWeek dayOfWeek = DayOfWeek.Saturday;
var dates = 
    // generate dates for all days in the month
    Enumerable.Range(1, DateTime.DaysInMonth(year, month))
    .Select(x => new DateTime(year, month, x))
    // select only those of particular dayOfWeek
    .Where(d => d.DayOfWeek == dayOfWeek)
    .ToList();

答案 2 :(得分:1)

对于Linq,没有假设当月的天数:

    static IEnumerable<DateTime> GetSaturdaysInMonth(int year, int month)
    {
        return Enumerable.Range(1, DateTime.DaysInMonth(year, month))
            .Select(day => new DateTime(year, month, day))
            .Where(dt => dt.DayOfWeek == DayOfWeek.Saturday);
    }

答案 3 :(得分:0)

您可以根据年月变量创建DateTime作为该月的第一天,迭代下个月的第一天,并检查DayOfWeek propertySaturday还是不。等;

var month = 3;
var year = 2016;

var start = new DateTime(year, month, 1);
var end = start.AddMonths(1);

while (start < end)
{
    if (start.DayOfWeek == DayOfWeek.Saturday)
    {
        Console.WriteLine(start.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture));
    }
    start = start.AddDays(1);
}

打印

05/03/2016
12/03/2016
19/03/2016
26/03/2016

答案 4 :(得分:0)

这是一个(非常简单)的可能性:

var startDate = new DateTime(2016, 3, 1);
var list = new List<DateTime>();
for(int i = 0; i < DateTime.DaysInMonth(2016, 3); i++) {
    var date = startDate.AddDays(i);
    if (date.DayOfWeek == DayOfWeek.Saturday) list.Add(date);
}

您可以在每月的第一天创建startDate 然后,您遍历该月的所有日子并将星期六添加到列表中。