【问题标题】:C# - Check if a given date is the Fifth week day of a month?C# - 检查给定日期是否是一个月的第五个星期?
【发布时间】:2018-07-15 22:16:39
【问题描述】:

我有点困惑如何检查给定的日期是否是一个月内出现第五次的日期。例如,以下是一个月内出现 5 次的一周中的某些日子:

  • Thursday 29th March 2018
  • Friday 30th March 2018
  • Saturday 31st March 2018
  • Saturday 29th April 2018

如果给定的日期是一个月的第五周,我想要一个返回 truefalse 的方法。

我已经尝试了this question 中的以下代码,但此方法仅返回开始第五周周期的第一个日期。

 public DateTime? FifthDay(DayOfWeek dayOfWeek, byte monthNum, int year)
 {
      var searchDate = new DateTime(year, monthNum, 1);
      var weekDay = searchDate.DayOfWeek;

      if (weekDay == dayOfWeek)
      {
          searchDate = searchDate.AddDays(28);
      }

      for (DateTime d = searchDate; d < d.AddDays(7); d = d.AddDays(1))
      {
          if (d.DayOfWeek == dayOfWeek)
          {
              searchDate = searchDate.AddDays(28);
              break;
          }
       }

       if (searchDate.Month == monthNum)
          return searchDate;

      return null;
  }

谢谢

【问题讨论】:

  • 你现在处理日期、时区和国际化的时代。美国人和英国人甚至无法在一周开始的达成一致,这使整个问题变得一团糟。我唯一的建议?大多数与日期相关的函数都使用当前的 Windows 格式选择。其中可能包括该数据。除了那个理想的情况,我永远不会触及这些主题:youtube.com/watch?v=-5wpm-gesOYyoutube.com/watch?v=0j74jcxSunY
  • 我可能会尝试从您链接的问题中获得赞成、接受的答案中的代码?如果您不熟悉 linq,但回答有效,您可能会请求帮助使用循环编写该代码。
  • @Christopher 一周的哪一天开始并不重要。 OP 只想知道一周中的某一天是否在同一个月内出现 5 次。
  • @Christopher 这是一个月中的几天,而不是一周。如果日期部分是 29、30 或 31,则它是该天的第五次出现(除非有一些日历一周中有超过或少于 7 天)

标签: c# .net date datetime


【解决方案1】:

任何超过 28 岁的日期不会成为该工作日的第五次出现吗?

public static bool IsFifthWeek(DateTime d) => d.Day > 28;

【讨论】:

  • 是的。 29 日、30 日和 31 日是一个月内 DayOfWeek 的唯一(并且始终是)第五次出现。 (任何大于 7 * 4 的)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-29
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 2021-12-04
相关资源
最近更新 更多