C# 当前日期公式中特定日期的最后日期

C# 当前日期公式中特定日期的最后日期,c#,algorithm,datetime,C#,Algorithm,Datetime,我有一个要求,我想根据今天的日期计算给定日期的最后日期。例如,我有一个方法 DateTime GetDate(DateTime now, DayOfWeek dayOfWeek) { //Logic goes here } 例如 若我在星期五过了星期五,而今天是星期一,那个么应该是星期五 上周五给我回信 如果我过了星期五,今天是星期五,那么应该是同一天 返回 条件: 我只想用公式来计算日期 不希望任何东西被假设或硬编码 我不想用if…else 您可以通过将一周中的当前日期与目标日期进行比较

我有一个要求,我想根据今天的日期计算给定日期的最后日期。例如,我有一个方法

DateTime GetDate(DateTime now, DayOfWeek dayOfWeek)
{
  //Logic goes here
}
例如

  • 若我在星期五过了星期五,而今天是星期一,那个么应该是星期五 上周五给我回信
  • 如果我过了星期五,今天是星期五,那么应该是同一天 返回
  • 条件:

  • 我只想用公式来计算日期
  • 不希望任何东西被假设或硬编码
  • 我不想用if…else

  • 您可以通过将一周中的当前日期与目标日期进行比较,计算出要减去多少天,如果是负数,则将其换行:

    static DateTime GetDate(DateTime now, DayOfWeek dayOfWeek)
    {
        // Number of days to subtract, e.g. 1 for "today is Friday, we want Thursday"
        // The ((...) + 7) % 7 part is to handle wrap-around for negative values.
        int daysDifference = ((now.DayOfWeek - dayOfWeek) + 7) % 7;
        return now.AddDays(-daysDifference);
    }
    
    或使用(我的日期/时间API,允许更清晰地表示“仅一个日期”等):


    您可以通过将一周中的当前日期与目标日期进行比较,计算出要减去多少天,如果是负数,则将其换行:

    static DateTime GetDate(DateTime now, DayOfWeek dayOfWeek)
    {
        // Number of days to subtract, e.g. 1 for "today is Friday, we want Thursday"
        // The ((...) + 7) % 7 part is to handle wrap-around for negative values.
        int daysDifference = ((now.DayOfWeek - dayOfWeek) + 7) % 7;
        return now.AddDays(-daysDifference);
    }
    
    或使用(我的日期/时间API,允许更清晰地表示“仅一个日期”等):


    为什么不使用if/else?虽然我可以看出这可能没有必要,但它最终可能是最干净的方法。你想保持一天中的同一个时间吗?这听起来像一个作业指导书,你试过什么?我不知道我的问题看起来是一个作业指导书,我只想知道最短的公式,它可以用if,loops来完成,但我试着开发一个公式,我不能,所以我把它贴在这里。你为什么不想用if/else呢?虽然我可以看出这可能没有必要,但它最终可能是最干净的方法。你想保持一天中的同一个时间吗?这听起来像一个工作指令,你尝试过什么?我不知道我的问题看起来是一个工作指令,我只想知道最短的公式,它可以使用if,loops来完成,但我试图开发一个公式,我不能,所以我把它贴在这里。
    DateTime GetDate(DateTime now, DayOfWeek dayOfWeek)
    {
        var day = new TimeSpan(1, 0, 0, 0);
        var result = now;
    
        while(result.DayOfWeek != dayOfWeek)
        {        
            result = result.Substract(day)
        }
    
        return result;
    } 
    
    private static DateTime GetDate(DateTime todayDate, DayOfWeek dayofweek)
    {
        while (todayDate.DayOfWeek != dayofweek)
        {
            todayDate = todayDate.AddDays(-1);
        }
        return todayDate;
    }