Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中获取周的第一个日期和当月的最后一个日期#_C#_Date_Datetime - Fatal编程技术网

C# 在C中获取周的第一个日期和当月的最后一个日期#

C# 在C中获取周的第一个日期和当月的最后一个日期#,c#,date,datetime,C#,Date,Datetime,需要帮助如何获取当月一周的第一个日期和最后一个日期 以下是我迄今为止所做的,但仍适用于某些情况,尤其是在开始日期和结束日期为周日的情况下: var givenDate = new DateTime(2018,4,1); var intervalToStart = givenDate.DayOfWeek - DayOfWeek.Monday; var startDate = givenDate.AddDays(-intervalToStart); DateTime

需要帮助如何获取当月一周的第一个日期和最后一个日期

以下是我迄今为止所做的,但仍适用于某些情况,尤其是在开始日期和结束日期为周日的情况下:

    var givenDate = new DateTime(2018,4,1);
    var intervalToStart = givenDate.DayOfWeek - DayOfWeek.Monday;
    var startDate = givenDate.AddDays(-intervalToStart);

    DateTime endDate;
    int intervalToEnd = 0; 

    if (startDate.Month != givenDate.Month)
        startDate = new DateTime(givenDate.Year, givenDate.Month, 1);

    var dayOfWeekStartDate = startDate.DayOfWeek.ToString().ToLower();

    switch (dayOfWeekStartDate)
        {
            case "sunday": intervalToEnd = 0;
                break;
            case "monday": intervalToEnd = 6;
                break;
            case "tuesday": intervalToEnd = 5;
                break;
            case "wednesday": intervalToEnd = 4;
                break;
            case "thursday": intervalToEnd = 3;
                break;
            case "friday": intervalToEnd = 2;
                break;
            case "saturday": intervalToEnd = 1;
                break;
        }

    endDate = startDate.AddDays(intervalToEnd);


    Console.WriteLine(startDate);
    Console.WriteLine(endDate);
案例1:

  • 给定日期:2018年5月5日(星期六)

  • 第一周日期:2018年5月1日(星期二)

  • 本周最后日期:208年5月6日(星期日)

案例2:

  • 给定日期:2018年5月9日(星期三)

  • 第一周日期:2018年5月7日(星期一)

  • 本周最后日期:2018年5月13日(星期日)

案例3:

  • 给定日期:2018年4月1日(星期日)

  • 第一周日期:2018年4月1日(星期日)

  • 本周最后日期:2018年4月1日(星期日)

案例4:

  • 给出日期:2018年6月2日(星期六)

  • 第一周日期:2018年6月1日(星期五)

  • 本周最后日期:2018年6月3日(星期日)

概念或答案是高度赞赏的


提前谢谢。

如果星期一是上个月,您想在本月的第一天返回吗

public static Tuple<DateTime, DateTime> GetFirstAndLastWeekDate(DateTime dt, DayOfWeek firstDayOfWeek = DayOfWeek.Monday)
{
    int diff = (7 + (dt.DayOfWeek - firstDayOfWeek)) % 7;
    DateTime firstDay = dt.AddDays(-1 * diff).Date;
    DateTime lastDay = firstDay.AddDays(6);
    if (dt.Month != firstDay.Month)
    {
        firstDay = new DateTime(dt.Year, dt.Month, 1);
    }

    return Tuple.Create(firstDay, lastDay);
}
公共静态元组GetFirstAndLastWeekDate(DateTime dt,DayOfWeek firstDayOfWeek=DayOfWeek.Monday)
{
int diff=(7+(dt.DayOfWeek-firstDayOfWeek))%7;
DateTime firstDay=dt.AddDays(-1*diff).Date;
DateTime lastDay=firstDay.AddDays(6);
如果(dt.月!=第一天.月)
{
第一天=新的日期时间(dt.年,dt.月,1);
}
返回Tuple.Create(第一天,最后一天);
}
使用

代码是这样的

var givenDate = new DateTime(2018, 4, 1);
int addMax = DateTime.DaysInMonth(givenDate.Year, givenDate.Month) - givenDate.Day;
int add = Math.Min(addMax, ((DayOfWeek.Saturday - givenDate.DayOfWeek) + 1) % 7);

int subMax = givenDate.Day - 1;
int sub = Math.Min(subMax, (givenDate.DayOfWeek - DayOfWeek.Monday + 7) % 7);

var firstDate = givenDate.AddDays(-sub);
var lastDate = givenDate.AddDays(add);
Console.Write("Give: {0}({1})\nFirst: {2}({3})\nLast: {4}({5})", 
    givenDate, givenDate.DayOfWeek, 
    firstDate, firstDate.DayOfWeek, 
    lastDate, lastDate.DayOfWeek);

有什么问题吗?请按照中规定的规则。另外,请注意,周开始是特定于文化的-它可能在周日、周一、周六等开始。希望这不是你的第一篇文章,你也知道。那你为什么要做家庭作业呢?我的假设是:一周从周一开始,在给定日期之前得到周一的日期。如果日期为上个月,则获取该月的第一个日期。对吗?也许这是你自己开始做作业的好方法。程序设计是关于自我教学、实践学习和体验的。