我的任务是找到用户输入的一年中的所有星期五。
有人可以解释一下怎么做吗? (我是c#的初学者)
答案 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
constructor和DayOfWeek
枚举的组合,例如;
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课程的更多信息