如何查找给定年份中的所有特定日期?

时间:2015-04-08 12:39:43

标签: c# datetime

我的任务是找到用户输入的一年中的所有星期五。

有人可以解释一下怎么做吗? (我是c#的初学者)

7 个答案:

答案 0 :(得分:4)

int year = 2015;
for(int m=1; m<=12; m++)
{
    var dt = new DateTime(year, m, 13);
    if (dt.DayOfWeek == DayOfWeek.Friday)           
        Console.WriteLine(dt.ToShortDateString());          
}

答案 1 :(得分:2)

如果您想在Gregorian Calender中获取这些日期,可以使用循环,DateTime constructorDayOfWeek枚举的组合,例如;

int year = 2015;
for (int i = 1; i < 13; i++)
{
     if(new DateTime(year, i, 13).DayOfWeek == DayOfWeek.Friday)
       Console.WriteLine(new DateTime(year, i, 13));
}

对于2015,结果将是;

13.02.2015 00:00:00
13.03.2015 00:00:00
13.11.2015 00:00:00

如果您想要月数,可以使用结果的.Month property;

Console.WriteLine((new DateTime(year, i, 13)).Month);

如果您想根据CurrentCulture获取月份名称,可以使用自定义MMMM specifier;

Console.WriteLine((new DateTime(year, i, 13)).ToString("MMMM"));

您也可以使用Enumerable.Range之类的;

List<int> monthList = Enumerable.Range(1, 12).
            Where(d => new DateTime(2015, d, 13).DayOfWeek == DayOfWeek.Friday).
            ToList(); // {2, 3, 11}

List<string> monthList = Enumerable.Range(1, 12).
               Where(d => new DateTime(2015, d, 13).DayOfWeek == DayOfWeek.Friday).
               Select(m => new DateTime(2015, m, 13).ToString("MMMM", CultureInfo.InvariantCulture)).
               ToList(); // {February, March, November}

答案 2 :(得分:2)

要获取您可以使用的日期 Linq

   var dates = Enumerable
     .Range(1, 12) // All months
     .Select(month => new DateTime(2015, month, 13)) 
     .Where(date => date.DayOfWeek == DayOfWeek.Friday);

打印出来

   Console.WriteLine(String.Join(Environment.NewLine, dates));

答案 3 :(得分:0)

尝试通过该线程中显示的代码激发灵感: Finding every friday from start date till the end of the year

(当然,你必须检查周五是否选择了13日)

答案 4 :(得分:0)

可以使用linq这样做。

var year = 2015;
        var months = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

        var unluckyDays = months.Select(m => new DateTime(year, m, 13)).Where(dt => dt.DayOfWeek == DayOfWeek.Friday);

第一个Select语句将整数列表投影到一个日期时间列表中,该日期时间代表指定年份中每个月的第13个月。

然后只需将此列表过滤到星期五为星期五的那些列表。

答案 5 :(得分:0)

DateTime对象在其上有一个名为DayOfWeek的属性。您可以利用它来帮助您确定所提供的日期是否返回星期五的DayOfWeek值:见下文:

    static void Main(string[] args)
    {
        for (var i = 1; i < 12; i++)
        {
            DateTime date = new DateTime(2015, i, 13);
            if (date.DayOfWeek == DayOfWeek.Friday)
                Console.WriteLine(date.ToShortDateString());
        }


        Console.ReadLine();
    }

答案 6 :(得分:0)

是的,很简单

int year = 2014;
DateTime day = new DateTime(2014,1,1);
while (day.Year == year)
{
    if (day.DayOfWeek == DayOfWeek.Friday && day.Day == 13)
    {
        Console.WriteLine(day);
    }
    day = day.AddDays(1);
}

您在年初创建一个DateTime变量 然后你在这个代码中循环遍历一年中的每一天我打印它

您可以在此处找到DateTime课程的更多信息

DateTime Day of the week

DateTime referenc in MSDN