如何从星期几和月周获取日期时间
本文关键字:周获 取日期 时间 | 更新日期: 2023-09-27 17:56:13
我有星期几和月一月,我想用两个值来获取日期时间。
例如:星期几 = 2(星期二),月周 = 3(当月第三周)
public DateTime GetDateTime(int year, int month, int dayOfWeek, int weekOfMonth)
我想要上面的方法来处理和返回日期时间。如何获取该日期时间?
这个片段对你有帮助吗?
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 天。添加星期几将为您提供月份中的某天。
首先,你必须知道从什么时候开始。然后计算你想要的一天很容易。
法典:也许,对你来说,一周不是从星期天开始,而是从星期一开始。因此,您创建一个枚举来帮助我们处理所有情况:
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