C++ Builder 参考手册 ➙ System::Dateutils ➙ IsValidDateMonthWeek
判断年、月、这个月的周、这个周的第几天是否有效 (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,并无其他额外的判断。
相关:
- System::Dateutils::DateToISO8601
- System::Dateutils::DecodeDateMonthWeek
- System::Dateutils::DecodeDateWeek
- System::Dateutils::DecodeDayOfWeekInMonth
- System::Dateutils::EncodeDateMonthWeek
- System::Dateutils::EncodeDateWeek
- System::Dateutils::EncodeDayOfWeekInMonth
- System::Dateutils::IsAM
- System::Dateutils::IsPM
- System::Dateutils::IsInLeapYear
- System::Dateutils::ISO8601ToDate
- System::Dateutils::IsValidDate
- System::Dateutils::IsValidTime
- System::Dateutils::IsValidDateDay
- System::Dateutils::IsValidDateMonthWeek
- System::Dateutils::IsValidDateTime
- System::Dateutils::IsValidDateWeek
- System::Dateutils::NthDayOfWeek
- System::Dateutils::TryEncodeDateMonthWeek
- System::Dateutils::TryEncodeDateWeek
- System::Dateutils::TryEncodeDayOfWeekInMonth
- System::Dateutils::TryISO8601ToDate
- System::Dateutils::WeekOf
- System::Dateutils::WeeksInAYear
- System::Dateutils::WeeksInYear
- System::Dateutils
- System::Sysutils::IsLeapYear
- System::Sysutils
C++ Builder 参考手册 ➙ System::Dateutils ➙ IsValidDateMonthWeek
网友评论