【发布时间】:2011-07-04 12:43:30
【问题描述】:
我正在尝试用 C# 为我的工资单程序创建一个星期生成器。我创建了一个类似的,它为给定日期创建一年中的几个月。
我希望给定日期的输出如下。例如。今天是 2010 年 7 月 4 日。
如果我选择上述日期的下一个 10 周,我希望打印以下内容:
Week 1: F: 04/07/2011 L: 10/07/2011
Week 2: F: 11/07/2011 L: 17/07/2011
Week 3: F: 18/07/2011 L: 24/07/2011
Week 4: F: 25/07/2011 L: 31/07/2011
Week 1: F: 01/08/2011 L: 07/08/2011
Week 2: F: 08/08/2011 L: 14/08/2011
Week 3: F: 15/08/2011 L: 21/08/2011
Week 4: F: 22/08/2011 L: 28/08/2011
Week 5: F: 29/08/2011 L: 31/08/2011
Week 1: F: 01/09/2011 L: 07/09/2011
我希望以上内容适用于任何日期和我想要生成的任何周数。
有4个类:
程序.cs:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var dateInfos = GetDateInfo(DateTime.Now, 6);
foreach (var item in dateInfos)
Console.WriteLine("W: {0} F: {1} L: {2}", item.Week.ToString(), item.FirstDayOfWeek, item.LastDayOfWeek);
Console.ReadKey();
}
public static IList<DatesBag> GetDateInfo(DateTime givenDate, int numberOfWeeks)
{
var result = new List<DatesBag>();
result.Add(new DatesBag
{
Week = (WeeksOfAMonth)givenDate.Day,
FirstDayOfWeek = Week.GetFirstDayOfWeek(givenDate),
LastDayOfWeek = Week.GetLastDayOfWeek(givenDate)
});
for (int i = 1; i < numberOfWeeks; i++)
{
givenDate = givenDate.AddDays(7);
result.Add(new DatesBag { Week = (WeeksOfAMonth)givenDate.Day, FirstDayOfWeek = Week.GetFirstDayOfWeek(givenDate), LastDayOfWeek = Week.GetLastDayOfWeek(givenDate) });
}
return result;
}
}
}
DatesBag.cs:
namespace ConsoleApplication1
{
public class DatesBag
{
public WeeksOfAMonth Week { get; set; }
public DateTime FirstDayOfWeek { get; set; }
public DateTime LastDayOfWeek { get; set; }
}
}
WeeksOfAMonth.cs:
namespace ConsoleApplication2
{
public enum WeeksOfAMonth
{
Week1 = 1,
Week2,
Week3,
Week4,
Week5
}
}
Week.cs
namespace Payroll.Util.Helpers
{
public static class Week
{
/// <summary>
/// Gets the first day of the week.
/// </summary>
/// <param name="givenDate">The given date.</param>
/// <returns>the first day of the week</returns>
public static DateTime GetFirstDayOfWeek(DateTime givenDate)
{
return new DateTime(givenDate.Year, givenDate.Month, givenDate.Day);
}
/// <summary>
/// Gets the last day of week.
/// </summary>
/// <param name="givenDate">The given date.</param>
/// <returns>the last day of the week</returns>
public static DateTime GetLastDayOfWeek(DateTime givenDate)
{
return GetFirstDayOfWeek(givenDate).AddDays(7).Subtract(new TimeSpan(1, 0, 0, 0, 0));
}
}
}
我的两个问题:
-
在 program.cs 中,我知道这行不正确
Week = (WeeksOfAMonth)givenDate.Day,如何显示正确的星期?
无论该月是否已经结束,我的 givenDate 变量都会不断增加 7 天。我希望它跳到下个月,即使该月的最后一周少于 7 天。我如何做到这一点。
任何帮助表示赞赏。对于那些在美国的人,独立日快乐。
【问题讨论】: