有些事情你真的应该使用DateTime 类型(或类似的专业时间API)。这包括获取特定日期的星期几和获取月中的天数。你不会相信现实世界中有多少地方会被捏造。
所以,一分钱,一英镑/美元,对吧?整个程序:
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var year = DateTime.Today.Year;
foreach (var month in Enumerable.Range(1, 12))
{
foreach (var day in Enumerable.Range(1, DateTime.DaysInMonth(year, month))
.Select(day => new DateTime(year, month, day).ToString("dddd MMM d")))
{
Console.WriteLine(day);
}
Console.WriteLine("Press a key to continue...");
Console.ReadKey(true);
}
}
}
这也比基于数组的方法更好,因为它可以正确处理使用不同文化/语言设置运行的计算机。
我倾向于喜欢Enumerable.Range(),因为它让您思考如何绑定到数据源。但是如果你真的很难遵循这个,你可以使用for循环而不是foreach:
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var year = DateTime.Today.Year;
for(int month = 1; month <= 12; month++)
{
for(int day = 1; day <= DateTime.DaysInMonth(year, month); day++)
{
Console.WriteLine(new DateTime(year, month, day).ToString("dddd MMM d"));
}
Console.WriteLine("Press a key to continue...");
Console.ReadKey(true);
}
}
}
如果你真的很想做到这一点,我们至少可以使用数组查找来获取名称和星期几。我仍然坚持使用DateTime 类型来查找月份中的天数和一年中第一天的星期几。如果这是家庭作业或其他给你不合理的约束,那么这应该足够你找到剩下的代码了:
using System;
using System.Globalization;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var year = DateTime.Today.Year;
//FIRST DAY OF THE WEEK IS CUSTOMIZABLE/SYSTEM DEPENDANT!
var dayOffset = (int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek + (int)(new DateTime(year, 1, 1).DayOfWeek) ;
var dayNames = new string[] {"", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" };
var monthNames = new string[] { "", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
var dayOfYear = 1;
foreach (var month in Enumerable.Range(1, 12))
{
foreach (var dayOfMonth in Enumerable.Range(1, DateTime.DaysInMonth(year, month)))
{
Console.WriteLine("{0} {1} {2}", dayNames[(dayOfYear % 7) + dayOffset], monthNames[month], dayOfMonth);
dayOfYear++;
}
Console.WriteLine("Press a key to continue...");
Console.ReadKey(true);
}
}
}
我将再提供一个答案,我将数组定义修复为使用系统区域设置相关的月份和工作日名称:
using System;
using System.Globalization;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var year = DateTime.Today.Year;
var Jan1 = new DateTime(year, 1, 1);
var dayNames = Enumerable.Range(0, 7).Select(d => Jan1.AddDays(d).ToString("dddd")).ToArray();
var monthNames = Enumerable.Range(1,12).Select(m => new DateTime(year, m, 1).ToString("MMM")).ToArray();
var dayOfYear = 0;
foreach (var month in Enumerable.Range(1, 12))
{
foreach (var dayOfMonth in Enumerable.Range(1, DateTime.DaysInMonth(year, month)))
{
Console.WriteLine("{0} {1} {2}", dayNames[dayOfYear % 7], monthNames[month-1], dayOfMonth);
dayOfYear++;
}
Console.WriteLine("Press a key to continue...");
Console.ReadKey(true);
}
}
}