我有DayOfWeek和WeekOfMonth,我想使用两个值来获取日期时间。
例如:DayOfWeek = 2(星期二),WeekOfMonth = 3(每月第三周)
public DateTime GetDateTime(int year, int month, int dayOfWeek, int weekOfMonth)
我想要一个上面的方法来处理和返回日期时间。 我怎样才能获得该日期时间?
答案 0 :(得分:0)
这段代码会帮助你吗?
public DateTime GetDateTime(int year, int month, int dayOfWeek, int weekOfMonth)
{
var date = new DateTime(year, month, 1);
var temp = (int)date.DayOfWeek;
var day = 7 - (temp - 1) + ((weeks - 2) * 7) + dayOfWeek;
return new DateTime(year, month, day);
}
如果你有第3周,那么第1周和第2周各7天。添加dayOfWeek将为您提供月中的日期。
答案 1 :(得分:0)
首先,你必须知道这个月开始的那一天。然后计算你想要的日子很简单。
代码: 可能是,对你来说,周并不是星期天开始,而是星期一。因此,您创建了一个能够帮助我们完成所有案例的枚举:
internal enum StartingWeek
{
WeekBeginWithSunday,
WeekBeginWithMonday
};
然后,只需计算一周的开始日。
private static DateTime GetDateTime(int year, int month, DayOfWeek dayofweek, int weekofmonth, StartingWeek start = StartingWeek.WeekBeginWithSunday)
{
DateTime firstDayOfMonth = new DateTime(year, month, 1);
// ajust calcul with starting day on the week
int delta = start == StartingWeek.WeekBeginWithMonday ? 1 : 0;
int durationOfFirstWeek = (7 - (int)firstDayOfMonth.DayOfWeek + delta) % 7;
int day = durationOfFirstWeek + (weekofmonth - 2) * 7 + ((int)dayofweek + 7 - delta) % 7 + 1;
// day is on the previous month
if (day <= 0)
{
return new DateTime(year, month, 1);
}
if (day <= DateTime.DaysInMonth(year, month))
{
return new DateTime(year, month, day);
}
// day is on next month
return new DateTime(year, month, DateTime.DaysInMonth(year, month));
}
我决定在本月的第一天或最后一天返回例外,但你可以为这些案件做你想做的事。
测试:
private static void Main(string[] args)
{
int year = 2014;
int month = 10;
DayOfWeek dayofweek = DayOfWeek.Saturday;
int weekofmonth = 2;
DateTime date = GetDateTime(year, month, dayofweek, weekofmonth);
Console.WriteLine(date.ToShortDateString());
DateTime date2 = GetDateTime(year, month, DayOfWeek.Monday, 1, StartingWeek.WeekBeginWithMonday);
Console.WriteLine(date2.ToShortDateString());
DateTime date2b = GetDateTime(year, month, DayOfWeek.Saturday, 1, StartingWeek.WeekBeginWithMonday);
Console.WriteLine(date2b.ToShortDateString());
DateTime date2c = GetDateTime(year, month, DayOfWeek.Saturday, 2, StartingWeek.WeekBeginWithMonday);
Console.WriteLine(date2c.ToShortDateString());
DateTime date2d = GetDateTime(year, month, DayOfWeek.Sunday, 1, StartingWeek.WeekBeginWithMonday);
Console.WriteLine(date2d.ToShortDateString());
DateTime date2e = GetDateTime(year, month, DayOfWeek.Sunday, 2, StartingWeek.WeekBeginWithMonday);
Console.WriteLine(date2e.ToShortDateString());
DateTime date3 = GetDateTime(year, month, DayOfWeek.Saturday, 5, StartingWeek.WeekBeginWithMonday);
Console.WriteLine(date3.ToShortDateString());
Console.ReadLine();
}
输出(法语格式)
11/10/2014
01/10/2014
04/10/2014
11/10/2014
05/10/2014
12/10/2014
31/10/2014