680 bool hasBaseYear)
noexcept
683 SupportType support = SupportType::HasStrays;
684 SupportType zone = SupportType::None;
685 EnumIndexedBitSet<TemporalFieldCategory, EndTemporalFieldCategories> categories;
686 for (
const TemporalField &field : range) {
687 const DateTimePart part = field.part();
689 case DateTimePart::None:
691 case DateTimePart::Date:
692 case DateTimePart::Time:
693 categories.set(field.category);
695 case DateTimePart::Zone:
696 if (field.options.testAnyFlags(TemporalFieldFlag::Wide | TemporalFieldFlag::Short)
697 || field.options.testAnyFlags(TemporalFieldFlag::Numeric
698 | TemporalFieldFlag::Standalone
699 | TemporalFieldFlag::Iso8601)) {
700 zone = SupportType::Clear;
701 }
else if (zone == SupportType::None) {
703 zone = SupportType::Partial;
707 if (!wanted.testFlag(part))
711 bool partsSeen = wanted.testFlag(DateTimePart::Zone);
712 support = partsSeen ? zone : SupportType::None;
714 constexpr auto join = [](SupportType lhs, SupportType rhs) -> SupportType {
715 Q_PRE(lhs != SupportType::HasStrays);
716 Q_PRE(rhs != SupportType::HasStrays);
722 return SupportType::Partial;
725#define CHECK(field) (categories.test(TemporalFieldCategory::field))
727 if (wanted.testFlag(DateTimePart::Date)) {
728 const SupportType hasDate = [&] {
731 bool partial =
false;
734 }
else if (
CHECK(YearWithinCentury)) {
749 if (
CHECK(DayOfMonth))
751 else if (
CHECK(DayOfWeek))
753 if (fields == 3 && !partial)
754 return SupportType::Clear;
755 if (fields || partial)
756 return SupportType::Partial;
757 return SupportType::None;
759 support = partsSeen ? join(support, hasDate) : hasDate;
763 if (wanted.testFlag(DateTimePart::Time)) {
764 const SupportType hasTime = [&] {
767 bool partial =
false;
770 }
else if (
CHECK(HourMod12)) {
771 if (
CHECK(PeriodInDay))
775 }
else if (
CHECK(PeriodInDay)) {
783 partial = fields < 2;
784 else if (
CHECK(SecondFraction))
786 if (fields == 2 && !partial)
787 return SupportType::Clear;
788 if (fields || partial)
789 return SupportType::Partial;
790 return SupportType::None;
792 support = partsSeen ? join(support, hasTime) : hasTime;
799 Q_ASSERT(partsSeen || support == SupportType::None);