C# 如何查找给定年份中一周中的所有特定天数?

C# 如何查找给定年份中一周中的所有特定天数?,c#,datetime,C#,Datetime,我的任务是找出用户输入的一年中的13个星期五 有人能解释一下怎么做吗?我是c的初学者请尝试通过该线程中显示的代码来激发灵感: 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(

我的任务是找出用户输入的一年中的13个星期五


有人能解释一下怎么做吗?我是c的初学者

请尝试通过该线程中显示的代码来激发灵感:
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());          
}


当然,您必须检查所选的星期五是否为13日。如果您想输入这些日期,可以结合使用循环和枚举等

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));
}
如果你想计算月数,你可以使用这样的结果

Console.WriteLine((new DateTime(year, i, 13)).Month);
如果你想得到你的月份名称的基础上,你可以使用自定义喜欢

你也可以用like


可以使用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个


然后,只需将此列表筛选为星期五。

要获取可以使用Linq的日期,请执行以下操作:

把它们打印出来

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

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();
    }

是的,很简单

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类的更多信息


我认为只显示一个月就足够了,因为它要求特定年份的第13个星期五。因此,无论如何,只有这一年是不同的。但我必须说代码很好且易于阅读。@maam27当然,我也添加了它。你可以用Enumerable代替months。Range1,12你的得票率很低,因为你应该自己努力回答这个问题,也许可以展示一些你尝试过的代码,并寻求如何修复它的帮助。这会打印一年中所有的星期五,不仅仅是一个月13号的星期五。你可以通过只创建12个日期来检查而不是365个日期来提高效率,实际上366个herety,看起来很简单,但它非常聪明,哦,好吧,总有一天我也可以编写智能代码=@德拉甘·莫扬,技能来自实践。如果我的回答有帮助,请将其标记为已接受
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);
   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));
    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();
    }
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);
}