美文网首页
IsValidDateMonthWeek - C++ Build

IsValidDateMonthWeek - C++ Build

作者: 玄坴 | 来源:发表于2022-07-05 15:44 被阅读0次

    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

    相关文章

      网友评论

          本文标题:IsValidDateMonthWeek - C++ Build

          本文链接:https://www.haomeiwen.com/subject/voeovrtx.html