如何从星期几和月周获取日期时间

本文关键字:周获 取日期 时间 | 更新日期: 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