QCalendar Class

QCalendar 类描述日历系统。更多

Header: #include <QCalendar>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注意:该类中的所有函数都是可重入的

公共类型

(since 6.2) class SystemId
enum class System { Gregorian, Julian, Milankovic, Jalali, IslamicCivil }

公共函数

QCalendar()
QCalendar(QAnyStringView name)
QCalendar(QCalendar::System system)
(since 6.2) QCalendar(QCalendar::SystemId id)
QDate dateFromParts(const QCalendar::YearMonthDay &parts) const
QDate dateFromParts(int year, int month, int day) const
QString dateTimeToString(QStringView format, const QDateTime &datetime, QDate dateOnly, QTime timeOnly, const QLocale &locale) const
int dayOfWeek(QDate date) const
int daysInMonth(int month, int year = Unspecified) const
int daysInYear(int year) const
bool hasYearZero() const
bool isDateValid(int year, int month, int day) const
bool isGregorian() const
bool isLeapYear(int year) const
bool isLunar() const
bool isLuniSolar() const
bool isProleptic() const
bool isSolar() const
bool isValid() const
(since 6.7) QDate matchCenturyToWeekday(const QCalendar::YearMonthDay &parts, int dow) const
int maximumDaysInMonth() const
int maximumMonthsInYear() const
int minimumDaysInMonth() const
QString monthName(const QLocale &locale, int month, int year = Unspecified, QLocale::FormatType format = QLocale::LongFormat) const
int monthsInYear(int year) const
QString name() const
QCalendar::YearMonthDay partsFromDate(QDate date) const
QString standaloneMonthName(const QLocale &locale, int month, int year = Unspecified, QLocale::FormatType format = QLocale::LongFormat) const
QString standaloneWeekDayName(const QLocale &locale, int day, QLocale::FormatType format = QLocale::LongFormat) const
QString weekDayName(const QLocale &locale, int day, QLocale::FormatType format = QLocale::LongFormat) const

静态公共成员

QStringList availableCalendars()

详细说明

QCalendar 对象使用特定系统的规则,将年、月和日数映射到特定的日(最终由其儒略日数确定)。

默认的 QCalendar() 是没有年零的前置格里高利历。通过启用合适的功能或加载插件,还可以支持其他日历。可通过向构造函数传递QCalendar::System 枚举来构造作为功能支持的日历。所有支持的日历一旦构建完成,就可以通过名称来构建。(内置后端(可通过QCalendar::System 访问)也总是可以通过名称来访问。使用自定义后端的日历也可以使用在构建时分配给后端的唯一 ID 来构建。

QCalendar 的值是不可变的。

另请参阅 QDateQDateTime

成员类型文档

enum class QCalendar::System

该枚举类型用于指定日历系统的选择。

常数描述
QCalendar::System::Gregorian0国际通用的默认日历。
QCalendar::System::Julian8古罗马历。
QCalendar::System::Milankovic9一些东正教会使用的修订版儒略历。
QCalendar::System::Jalali10回历(也称波斯历)。
QCalendar::System::IslamicCivil11伊斯兰民历(表格式)。

另请参阅 QCalendarQCalendar::SystemId

成员函数文档

[explicit] QCalendar::QCalendar()

[explicit] QCalendar::QCalendar(QAnyStringView name)

[explicit] QCalendar::QCalendar(QCalendar::System system)

构造一个日历对象。

要选择使用的日历可以通过system ,使用枚举QCalendar::System ,或通过name ,使用字符串(Unicode 或 Latin 1)来表示。通过名称构造可能取决于是否先通过其他方式构造了给定日历的实例。如果没有参数,默认构造函数将返回公历。

注意: 在 6.4 之前的 Qt 版本中,按name 的构造函数只接受QStringViewQLatin1String ,而不接受QAnyStringView

另请参阅 QCalendar,System, 和isValid() 。

QDate QCalendar::dateFromParts(const QCalendar::YearMonthDay &parts) const

QDate QCalendar::dateFromParts(int year, int month, int day) const

将年、月、日转换为QDate

yearmonthday 可以作为单独的数字传递,也可以打包作为parts 的成员。如果有年月日,则返回该日历中包含给定年月日的QDate 。否则,包括任何值为 QCalendar::Unspecified 的情况,将返回一个 isNull() 为 true 的QDate

另请参阅 isDateValid() 和partsFromDate() 。

[explicit, since 6.2] QCalendar::QCalendar(QCalendar::SystemId id)

这是一个重载函数。

构造一个日历对象。

在使用自定义日历实现时,其后端会在创建时分配一个唯一的 ID;将该 ID 作为id 传递给此构造函数将获得一个使用该后端的 QCalendar。当后端未按名称注册时,这将非常有用。

此函数在 Qt 6.2 中引入。

[static] QStringList QCalendar::availableCalendars()

返回可用日历系统的名称列表。

除了 Qt 提供的日历系统外,这些日历系统可能由插件或链接到应用程序中的其他代码提供,其中一些由功能控制。

QString QCalendar::dateTimeToString(QStringView format, const QDateTime &datetime, QDate dateOnly, QTime timeOnly, const QLocale &locale) const

返回表示给定日期、时间或日期-时间的字符串。

如果datetime 有效,则表示日期和时间字段的格式指定;否则,如果dateOnly 有效,则表示日期和时间字段的格式指定;最后,如果timeOnly 有效,则表示日期和时间字段的格式指定。如果这些都无效,则返回空字符串。

有关支持的字段指定符,请参阅QDate::toStringQTime::toString() 。format 中被识别为字段规范符号的字符会被代表日期和/或时间的适当数据的文本替换。表示这些字符的文本可能取决于所指定的localeformat 中的其他字符会被逐字复制到返回的字符串中。

另请参阅 monthName()、weekDayName()、QDate::toString() 和QTime::toString()。

int QCalendar::dayOfWeek(QDate date) const

返回给定date 的星期数字。

如果日历无法表示指定日期,则返回 0。返回 1 表示星期一,返回 7 表示星期日。有闰间日的日历可以使用其他数字来表示。

另请参阅 partsFromDate() 和Qt::DayOfWeek

int QCalendar::daysInMonth(int month, int year = Unspecified) const

返回给定month 中的天数year

月份连续编号,每年的第一个月从 1 开始。如果yearUnspecified (未传递时为默认值),则返回正常年份的月份长度。

另请参阅 maximumDaysInMonth() 和minimumDaysInMonth()。

int QCalendar::daysInYear(int year) const

返回year 中的天数。

Unspecified 作为year 处理未定义。

bool QCalendar::hasYearZero() const

如果该日历有零年,则返回true

日历可以表示从第一年开始的年份,但无法描述第一年之前的年份;这样的日历没有零年,不是近似历。

表示元年之前年份的日历可以简单地按照通常的整数计数法对这些年份进行编号,这样元年之前的年份就是零年,而元年之前的年份则是负数;这样的日历是近曲式的,有零年。日历也可能有一个零年(例如,某个重大事件发生的年份,随后的年份是该事件发生后的第一年、第二年,依此类推),但不描述零年之前的年份。这样的历法有零年,但并不前置。

不过,有些历法用另一种编号方式来表示其第一年之前的年份;例如,前倾公历的第一年是公元前 1 年,其之前的年份是公元前 1 年,然后是公元前 2 年,以此类推。在这种情况下,我们使用负年号来进行这种交替编号,第 -1 年为第 1 年的前一年,第 -2 年为第 -1 年的前一年,以此类推。这种历法是前历法,但没有零年。

另请参见 isProleptic()。

bool QCalendar::isDateValid(int year, int month, int day) const

如果给定的yearmonthday 指定了该日历中的有效日期,则精确返回true

通常,这意味着 1 <= 月 <=monthsInYear (年)和 1 <= 日 <=daysInMonth (月、年)。不过,有闰日或闰月的日历可能会使情况复杂化。

bool QCalendar::isGregorian() const

如果此日历对象是其他 Qt API(如QDate )用作默认日历的公历对象,则返回true

bool QCalendar::isLeapYear(int year) const

如果给定的year 是闰年,则返回true

由于一年的天数不是整数,因此有些年份比其他年份长。差别可能是一整个月,也可能只是一天;具体细节因日历而异。

另请参阅 isDateValid() 。

bool QCalendar::isLunar() const

如果该日历是农历,则返回true

农历是主要基于月相的日历。

bool QCalendar::isLuniSolar() const

如果该日历为阴历,则返回true

农历-太阳历表达的是月相,但也会根据太阳在天空中相对于恒星的不同位置进行调整。

bool QCalendar::isProleptic() const

如果该日历是前历法,则返回true

前闰日历可以任意描述第一个年份之前的年份。这些年份用负年号表示,也可能用零年表示。

另请参见 hasYearZero()。

bool QCalendar::isSolar() const

如果该日历是阳历,则返回true

阳历主要基于太阳在天空中相对于恒星的位置变化。

bool QCalendar::isValid() const

如果这是一个有效的日历对象,则返回 true。

使用未识别的日历名称创建日历可能会导致对象无效。使用此方法可在按名称创建日历后进行检查。

[since 6.7] QDate QCalendar::matchCenturyToWeekday(const QCalendar::YearMonthDay &parts, int dow) const

调整日期的世纪,使其与给定的星期相匹配。

适用于给定日期的星期、月日、月份和年的最后两位数字的情况。以给定的dow 作为dayOfWeek() 返回一个QDate 实例,在月份和星期上与给定的parts 匹配。返回的QDateyear() 将与parts.year 相差 100 倍,小倍数优先于大倍数,正倍数优先于负倍数。

如果没有日期符合这些条件,则返回无效的QDate :星期与所给的其他数据不一致。例如,在公历中就会出现这种情况,因为公历的 400 年周期是一个整数周,所以任何给定的月份和该月的某一天,在给定后两位数的年份中,都只属于一周中的四天。(在世纪之交的 2 月 29 日这种特殊情况下,如果该年是闰年,则一周中只有一天是可能的:星期二)。

此函数在 Qt 6.7 中引入。

int QCalendar::maximumDaysInMonth() const

返回任何年份日历中最长月份的天数。

另请参阅 daysInMonth() 和minimumDaysInMonth()。

int QCalendar::maximumMonthsInYear() const

返回任何年份可能包含的最大月份数。

另请参阅 monthName()、standaloneMonthName() 和monthsInYear()。

int QCalendar::minimumDaysInMonth() const

返回任何年份日历中最短月份的天数。

另请参阅 daysInMonth() 和maximumDaysInMonth()。

QString QCalendar::monthName(const QLocale &locale, int month, int year = Unspecified, QLocale::FormatType format = QLocale::LongFormat) const

返回适合本地化的月份名称。

月份用数字表示,month = 1 表示该年的第一个月,其后的月份按此编号。如果month 数字无法识别,则返回空字符串。

year 可能是 "未指定",在这种情况下,应使用典型年份月份的数字到名称的映射。有些日历的闰月并不总是在年末,它们的月份编号到名称的映射可能取决于闰月的位置。因此,如果知道年份,通常应指定年份。

在指定的locale 中,名称将以完整日期通常使用的形式返回;format 决定名称的完整表达方式(即缩写到什么程度)。

另请参阅 standaloneMonthName()、maximumMonthsInYear() 和dateTimeToString()。

int QCalendar::monthsInYear(int year) const

返回给定year 中的月份数。

如果yearUnspecified ,则返回一年中最多的月份数。

另请参阅 maximumMonthsInYear() 。

QString QCalendar::name() const

该日历的主要名称。

日历还可能有一些别名。通过名称实例化的日历可以使用此类别名,在这种情况下,其 name() 不必与实例化时使用的别名相匹配。

QCalendar::YearMonthDay QCalendar::partsFromDate(QDate date) const

QDate 转换为年、月、日。

如果日历无法表示给定的date ,则返回结构isValid() 的值为 false。否则,其年、月、日成员将记录其表示的同名部分。

另请参阅 dateFromParts()、isProleptic() 和hasYearZero()。

QString QCalendar::standaloneMonthName(const QLocale &locale, int month, int year = Unspecified, QLocale::FormatType format = QLocale::LongFormat) const

返回适合本地化的月份独立名称。

月份用数字表示,其中month = 1 表示该年的第一个月份,其后的月份依次编号。如果month 数字无法识别,则返回空字符串。

year 可能是 "未指定",在这种情况下,应使用典型年份月份的数字到名称的映射。有些日历的闰月并不总是在年末,它们的月份编号到名称的映射可能取决于闰月的位置。因此,如果知道年份,通常应指定年份。

名称将以在指定的locale 中单独使用的形式返回;format 决定名称的完整表达方式(即缩写程度)。

另请参阅 monthName()、maximumMonthsInYear() 和dateTimeToString()。

QString QCalendar::standaloneWeekDayName(const QLocale &locale, int day, QLocale::FormatType format = QLocale::LongFormat) const

返回一个适合本地化的星期独立名称。

星期的编号从 1(星期一)到 7(星期日)。某些日历可能会为其他天数(例如不属于任何一周的闰(interallary)日)提供更高的数字。如果day 数字不被识别,则返回空字符串。

在指定的locale 中,名称将以单独使用的形式返回(例如,在日历以表格形式显示月份时作为列标题,连续的星期作为行);format 决定名称的完整表达方式(即缩写程度)。

另请参阅 weekDayName() 和dayOfWeek() 。

QString QCalendar::weekDayName(const QLocale &locale, int day, QLocale::FormatType format = QLocale::LongFormat) const

返回一个适合本地化的星期名称。

星期的编号从 1(星期一)到 7(星期日)。某些日历可能会为其他天数(例如不属于任何一周的闰(interallary)日)提供更高的数字。如果day 数字不被识别,则返回空字符串。

名称将以通常在完整日期中使用的形式返回,格式为指定的localeformat 决定了名称的完整表达方式(即缩写程度)。

另请参阅 standaloneWeekDayName() 和dayOfWeek()。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.