IsValidDateMonthWeek - C++ Builder

C++ Builder 参考手册System::DateutilsIsValidDateMonthWeek


判断年、月、这个月的周、这个周的第几天是否有效 (ISO 8601)

头文件:#include <System.DateUtils.hpp>
命名空间:System::Dateutils
函数原型:

bool __fastcall IsValidDateMonthWeek(
     const System::Word AYear,
     const System::Word AMonth,
     const System::Word AWeekOfMonth,
     const System::Word ADayOfWeek);

参数:

  • AYear:年,0001 - 9999;
  • AMonth:月,1 - 12;
  • AWeekOfMonth:这个月的周,1 - 5;
  • ADayOfWeek:这一周的天,1 - 7;

返回值:

  • true:参数年、月、这个月的周、这个周的第几天有效;
  • false:参数的年、月、周、天无效;
  • 按照 ISO 8601 标准 (中国使用这个国际标准),一周 7 天:DayMonday ~ DaySunday
    星期一:DayMonday = 1
    星期二:DayTuesday = 2
    星期三:DayWednesday = 3
    星期四:DayThursday = 4
    星期五:DayFriday = 5
    星期六:DaySaturday = 6
    星期天:DaySunday = 7
    如果这一周跨两个月,由于一周七天,无法两等分,这一周在两个月的部分必然天数不同,在哪个月的天数多,这一周就归属于哪个月,跨年也是如此。另一种相同结论的说法:一周正中间一天即周四在哪个月,这一周就属于哪个月,数一数一个月有几个周四,这一个月一共就有几周。这说明:
    • 一周的七天可能不在同一个月,也可能不在同一年;
    • 一个月的最前和最后几天按照周的说法,可能不在这个月;
    • 一年的最前和最后的几天按照周的说法,可能不在这一年。
  • 一个月最多 5 周:如果一个月的第一天是周四,那么这个月的前 4 天 (1 - 4 日) 与上个月的后 3 天组成这个月的第一周,接下来的完整的 3 周 (21 天) 都在这个月,这样这个月前 25 天就是 1 - 4 周,如果这个月还剩下的天数够 4 天,就能再占一周,这样只要一个月有 29 天,就有可能占 5 个周。

根据上面日历截图的第一行这一周:2021/12/27 - 2022/1/2 这一周,有5天在2021年,2天在2022年,在2021年12月的天数多,那么这一周就属于2021年12月,2022/1/1 和 2022/1/2 在 2021年的第52周,2021年12月的第5周,这一周的第6天和第7天,2022/1/3 在2022年的第1周,2022年1月份的第1周,这一周的第1天。

  • 通过源码发现 IsValidDateMonthWeek 这个函数写的比较简略,只是判断了 1 ≤ 年 ≤ 9999、1 ≤ 月 ≤ 12、1 ≤ 周 ≤ 5、1 ≤ 天 ≤ 7,并无其他额外的判断。

相关:


C++ Builder 参考手册System::DateutilsIsValidDateMonthWeek

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容