- class QDate#
-
概述#
方法#
def
__init__()
def
__reduce__()
def
__repr__()
def
addDays()
def
addMonths()
def
addYears()
def
day()
def
dayOfWeek()
def
dayOfYear()
def
daysInMonth()
定义
daysInYear()
定义
daysTo()
定义
endOfDay()
定义
getDate()
定义
isNull()
定义
isValid()
定义
month()
定义
__ne__()
定义
__lt__()
定义
__le__()
定义
__eq__()
定义
__gt__()
定义
__ge__()
定义
setDate()
定义
startOfDay()
定义
toPython()
定义
toString()
定义
weekNumber()
定义
year()
静态函数#
定义
fromString()
定义
isLeapYear()
定义
isValid()
注
本文档可能包含从C++自动翻译成Python的代码片段。我们始终欢迎对片段翻译的贡献。如果您看到翻译有问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述#
QDate
对象表示一个特定日期,无论它是使用创建时的日历、区域设置或其他设置,还是由系统提供的。它可以报告相对于儒略历或任何作为QCalendar
对象的日历年。应该值方式而不是通过常量引用传递QDate
对象;它们简单地包装了qint64
。QDate
对象通常通过显式给出年、月和日期来创建。请注意,QDate
将小于100的年号视为所表示的,即作为1到99的年份,不添加任何偏移量。静态函数currentDate()
创建一个包含从系统时钟读取的日期的QDate
对象。也可以使用setDate()
设置一个显式的日期。函数fromString()
根据给定的字符串和日期格式将字符串中的日期解释成QDate
。year()
、month()
和day()
函数提供对年、月和日数字的访问。当需要多个这些值时,调用partsFromDate()
效率更高,以节省重复(可能昂贵的)历法计算。此外,还提供了
dayOfWeek()
和dayOfYear()
函数。同样的信息可以通过toString()
函数以文本格式提供。QLocale
可以将日期数字映射为名称,而QCalendar
可以将月份数字映射为名称。QDate
提供了一套完整的操作符,用于比较两个QDate
对象,其中较小表示较早,较大表示较晚。您可以使用
addDays()
根据给定天数增加(或减少)日期。类似地,您可以使用addMonths()
和addYears()
。函数daysTo()
返回两个日期之间的天数。函数
daysInMonth()
和daysInYear()
分别返回当前日期所在月份和年份中的天数。isLeapYear()
函数表示日期是否为闰年。QCalendar
也可以提供这种信息,在某些情况下可能更方便。备注
注
所有字符串格式到和从的转换均使用C区域设置完成。有关本地化转换,请参阅
QLocale
。在公历中,没有公元0年。那一年的日期被视为无效。-1年是“公元前1年”或“公元前1年”。公元1年1月1日之前的一天,即
QDate
(1, 1, 1),是公元前1年度的12月31日,即QDate
(-1, 12, 31)。其他日历也有类似的行为;请参阅hasYearZero()
。有效日期范围
日期在内部以儒略日号存储,这是一个连续范围内的每一天的整数计数,公历公元前4714年11月24日是儒略日0(罗马历公元前4713年1月1日是儒略日0)。这不仅是一种高效和准确的存储绝对日期的方法,而且适合将日期转换为其他日历系统,如犹太历、伊斯兰历或中国农历。可以使用
toJulianDay()
获取儒略日号,并使用fromJulianDay()
设置。由于技术原因,《QDate》类可以表示的儒略日号的范围限制在-784350574879和784354017364之间,这意味着从公元前20亿多年到公元后20亿多年。这个范围比《QDateTime》能表示的日期范围宽七倍以上。
- __init__(y, m, d)#
- 参数:
y – int
m – int
d – int
使用年
y
、月m
和日d
构造日期。日期是以公历为基准理解的。如果指定的日期无效,则日期不会被设置,并且
isValid()
返回false
。- __init__()
构造一个空日期。空日期无效。
- __init__(y, m, d, cal)
- 参数:
y – int
m – int
d – int
cal –
QCalendar
- __reduce__()#
- 返回类型:
对象
- __repr__()#
- 返回类型:
对象
返回一个
QDate
对象,该对象包含比此对象日期晚ndays
天的日期(如果ndays
为负数,则会提前)。如果当前日期无效或新日期超出范围,则返回空日期。
这是一个重载函数。
返回一个
QDate
对象,该对象包含比此对象日期晚nmonths
个月的日期(如果nmonths
为负数,则会提前)。如果提供了,使用
cal
作为日历,否则使用公历。这是一个重载函数。
返回一个包含 date
nyears
后的日期(或负数时为较早的日期)的QDate
对象。如果提供了,使用
cal
作为日历,否则使用公历。注
如果结果年份中不存在结束日期/月份组合(例如,对于格里历,如果日期是2月29日,而最终年份不是闰年),此函数将返回给定月份中最后的有效日期(在示例中为2月28日)。
返回系统时钟的当前日期。
- day()#
- 返回类型:
int
这是一个重载函数。
- day(cal)
- 参数:
cal –
QCalendar
- 返回类型:
int
返回此日期的月份中的日期。
如果提供,则使用
cal
作为日历,否则使用公历(返回范围从1到31)。如果日期无效,则返回0。- dayOfWeek()#
- 返回类型:
int
这是一个重载函数。
- dayOfWeek(cal)
- 参数:
cal –
QCalendar
- 返回类型:
int
返回此日期的星期(1表示星期一,7表示星期日)。
如果提供,则使用
cal
作为日历,否则使用公历。如果日期无效,则返回0。某些日历可能对大于7的值赋予特殊意义(例如,闰日)。返回此日期的年中的日期(1为第一天)。
如果提供,则使用
cal
作为日历,否则使用公历。如果日期或该日期所在年份的第一天无效,则返回 0。- dayOfYear()
- 返回类型:
int
这是一个重载函数。
- daysInMonth()#
- 返回类型:
int
这是一个重载函数。
- daysInMonth(cal)
- 参数:
cal –
QCalendar
- 返回类型:
int
返回此日期所在月份的天数。
如果提供,则使用
cal
作为日历,否则使用公历(结果范围从 28 到 31)。如果日期无效,则返回 0。- daysInYear()#
- 返回类型:
int
这是一个重载函数。
- daysInYear(cal)
- 参数:
cal –
QCalendar
- 返回类型:
int
返回此日期所在年份的天数。
如果提供,则使用
cal
作为日历,否则使用公历(结果为 365 或 366)。如果日期无效,则返回 0。警告
本节包含自动从 C++ 转换至 Python 的代码片段,可能包含错误。
返回从此日期到
d
(如果d
早于此日期,则结果为负数)的天数。如果任意日期无效,则返回 0。
示例
QDate d1(1995, 5, 17) # May 17, 1995 QDate d2(1995, 5, 20) # May 20, 1995 d1.daysTo(d2) # returns 3 d2.daysTo(d1) # returns -3
参见
这是一个重载函数。
这是一个重载函数。
Use
endOfDay(const QTimeZone &) instead. Returns the end-moment of the day. When a day ends depends on a how time is described: each day starts and ends earlier for those with higher offsets from UTC and later for those with lower offsets from UTC. The time representation to use can be specified either by a \a spec and \a offsetSeconds (ignored unless \a spec is Qt::OffsetSeconds) or by a time zone. Usually, the end of the day is one millisecond before the midnight, 24:00: however, if a local time transition causes the given date to skip over that moment (e.g. a DST spring-forward skipping over 23:00 and the following hour), the actual latest time in the day is returned. When \a spec is Qt::OffsetFromUTC, \a offsetSeconds gives the implied zone's offset from UTC. As UTC and such zones have no transitions, the end of the day is QTime(23, 59, 59, 999) in these cases. In the rare case of a date that was entirely skipped (this happens when a zone east of the international date-line switches to being west of it), the return shall be invalid. Passing Qt::TimeZone as \a spec (instead of passing a QTimeZone) will also produce an invalid result, as shall dates that end outside the range representable by QDateTime.
返回一天结束的时刻。
一天何时结束取决于时间的描述方式:在时区较西边的地方,每天开始和结束的较早,在时区较东边的地方则较晚。可以通过可选的时间
zone
来指定使用的时间表示。默认的时间表示是系统的本地时间。通常,一天结束的时间是午夜零点前的一毫秒,24:00:然而,如果时区的过渡导致给定的日期跳过这一时刻(例如,夏令时向前跳过23:00和随后的小时),则返回该天内实际最新的时间。这只能在时间表示为时区或本地时间时才会出现。
当
zone
的timeSpec
为OffsetFromUTC
或UTC
时,时间表示没有过渡,因此一天结束的时间是QTime
(23, 59, 59, 999)。在非常罕见的情况下,如果一个日期被完全跳过(这发生在国际日期变更线的东边的zones变成西边时),返回值应为无效。如果将无效的时间区作为
zone
传递,也会产生无效的结果,同样,当日期超出QDateTime
可表示的范围之外结束时,也应产生无效结果。参见
将儒略日
jd
转换为一个QDate
.- static fromString(string, format, baseYear, cal)#
警告
本节包含自动从 C++ 转换至 Python 的代码片段,可能包含错误。
根据给定的字符串返回表示的
QDate
,使用给定的格式,或者如果字符串无法解析,则返回无效日期。如果指定使用
cal
作为日历,则使用该日历;否则使用公历。下面格式描述中的值适用于后者;对于其他日历,它们可能不同。以下表达式可用于格式
表达式
输出
d
不带前导零的天数(1到31)
dd
带前导零的天数(01到31)
ddd
缩写的天名(‘Mon’到‘Sun’)。
dddd
完整的天名(‘Monday’到‘Sunday’)。
M
不带前导零的月数(1到12)
MM
带前导零的月数(01到12)
MMM
缩写的月名(‘Jan’到‘Dec’)。
MMMM
完整的月名(‘January’到‘December’)。
yy
两位数的年份(00到99)
yyyy
四位数的年份,可能带有前导减号表示负数年份。
注
天和月名必须用英语(C语言环境)给出。若要识别本地化的月和日名,请使用
system()
.toDate()。所有其他输入字符将被视为文本。任何非空字符序列,如果用单引号括起来,也将被视为文本(去除引号)而不是解释为表达式。例如
date = QDate.fromString("1MM12car2003", "d'MM'MMcaryyyy") # date is 1 December 2003
如果格式不满足,则返回无效的
QDate
。那些不需要前导零的表达式(d,M)将是贪婪的。这意味着它们将使用两位数字,即使这将使它们超出接受的值域,并留下太少数字供其他部分使用。例如,以下格式字符串本可以表示一月三十日,但M会抓住两位数字,导致无效日期date = QDate.fromString("130", "Md") # invalid()
对于格式中没有体现的任何字段,使用以下默认值
字段
默认值
年份
baseYear
(或1900)月份
1(一月)
天数
1
当格式只指定年份的最后两位时,从
baseYear
出发的100年将是首先考虑的候选人。在6.7版本之前,没有baseYear
参数,总是使用1900。这是baseYear
的默认值,从那时起选择到1999年的年份。传递1976作为baseYear
将选择从1976年到2075年的年份,例如。当格式还包括月份、日期(月份中的日期)和星期几时,这些足以暗示世纪。在这种情况下,在离baseYear
所表示的世纪最近的世纪中选择匹配的日期,优先考虑后期而不是早期。有关更多详细信息,请参见matchCenturyToWeekday()
和Date ambiguities
。以下示例演示了默认值
QDate.fromString("1.30", "M.d") # January 30 1900 QDate.fromString("20000110", "yyyyMMdd") # January 10, 2000 QDate.fromString("20000110", "yyyyMd") # January 10, 2000
注
如果格式字符在表中的重复次数超过了使用它的最长表达式,那么这个格式部分将被读取为没有分隔符的多个表达式;最长的上面,可能重复出现与它的副本数量一样多,以可能较短的残差结束。因此,
'MMMMMMMMMM'
将匹配"MayMay05"
并将月份设置为五月。同样,'MMMMMM'
将匹配"May08"
并发现这不一致,导致无效日期。日期歧义
不同的文化使用不同的日期格式,因此用户可能会混淆日期字段应给出的顺序。例如,
"Wed 28-Nov-01"
可能意味着2028年11月1日或2001年的11月28日(都是星期三)。使用格式"ddd yy-MMM-dd"
它将按第一种方式解释,使用"ddd dd-MMM-yy"
按第二种。然而,用户意图可能取决于用户通常写日期的方式,而不是代码预期的格式。上面考虑的例子中,混淆了月份和两位数的年份。类似的混乱可能出现在每月的日期和月份都作为数字给出时交换月份和日期。在这些情况下,在日期格式中包含星期几的领域可以提供一定冗余,这有助于捕捉这类错误。然而,就像上面的例子一样,这并不总是有效的:两个字段(或它们的含义)的交换可能产生具有相同星期几的日期。
在格式中包含星期几也可以解决仅使用年份的最后两位数字指定的日期的世纪。不幸的是,当与用户(或其他数据来源)混淆两个字段的日期结合使用时,这种解决方案可能导致找到一个与格式读取匹配但不是作者意图的日期。同样,如果用户在其他方面正确的日期中简单地错误地获取星期几,这可能导致不同世纪的日期。在每种情况下,找到不同世纪的日期都可以将输入错误的时间变成极端不同。
避免日期歧义的最佳方式是使用四位数的年份和指定名称的月份(无论是全名还是缩写),理想情况下通过用户界面习语收集,这些习语可以向用户清楚地显示他们正在选择日期的哪个部分。包括星期几也可以通过提供检查数据一致性的手段来帮助。当数据来自用户时,使用用户选择的区域设置提供的格式,最好使用长格式,因为短格式更有可能使用两位数年份。当然,不一定总能控制格式——数据可能来自您无法控制的来源,例如。
由于这些可能的混淆来源,尤其是当你不能确定使用的是一种明确的格式时,检查将字符串作为日期读取的结果不仅有效,而且对于提供该结果的目的是合理的,这一点非常重要。如果结果超出了某些合理值范围,让用户确认其日期选择可能是有价值的,展示的日期采用长格式,包括月份数字和四位数的年份,以便于他们识别任何错误。
- 静态 fromString(string, format[, baseYear=QLocale.DefaultTwoDigitBaseYear])
- 参数:
string – str
format – str
baseYear – int
- 返回类型:
这是一个重载函数。
使用默认构造的
QCalendar
.这是一个重载函数。
- 静态 fromString(string[, format=Qt.TextDate])
- 参数:
string – str
format -
DateFormat
- 返回类型:
根据给定的字符串返回表示的
QDate
,使用给定的格式,或者如果字符串无法解析,则返回无效日期。对于
TextDate
的说明:仅识别英文月份名称(例如,短格式中的“Jan”或长格式中的“January”)。- 静态 fromString(string, format, baseYear, cal)
这是一个重载函数。
这是一个重载函数。
- 静态 fromString(string, format[, baseYear=QLocale.DefaultTwoDigitBaseYear])
- 参数:
string – str
format – str
baseYear – int
- 返回类型:
这是一个重载函数。
使用默认构造的
QCalendar
.这是一个重载函数。
- 静态 fromString(string, format[, baseYear=QLocale.DefaultTwoDigitBaseYear])
- 参数:
string – str
format – str
baseYear – int
- 返回类型:
这是一个重载函数。
使用默认构造的
QCalendar
.- 静态 fromString(string, format, baseYear, cal)
这是一个重载函数。
- 静态 fromString(string[, format=Qt.TextDate])
- 参数:
string – str
format -
DateFormat
- 返回类型:
这是一个重载函数。
- getDate()#
- 返回类型:
(year, month, day)
提取日期的年、月和日,并将它们分配给 *``year``、*``month`` 和 *``day``。指针可能是空指针。
如果日期无效,则返回 0。
- static isLeapYear(year)#
- 参数:
year – int
- 返回类型:
bool
如果指定的年份是格里高利历中的闰年,则返回
true
;否则返回false
。参见
- isNull()#
- 返回类型:
bool
如果日期为空,则返回
true
;否则返回false
。空日期是无效的。- isValid()#
- 返回类型:
bool
如果此日期有效,则返回
true
;否则返回false
。- static isValid(y, m, d)
- 参数:
y – int
m – int
d – int
- 返回类型:
bool
警告
本节包含自动从 C++ 转换至 Python 的代码片段,可能包含错误。
这是一个重载函数。
如果指定的日期(年份、月份和日期)在格里高利历中有效,则返回
true
;否则返回false
。示例
QDate.isValid(2002, 5, 17) # true QDate.isValid(2002, 2, 30) # false (Feb 30 does not exist) QDate.isValid(2004, 2, 29) # true (2004 is a leap year) QDate.isValid(2000, 2, 29) # true (2000 is a leap year) QDate.isValid(2006, 2, 29) # false (2006 is not a leap year) QDate.isValid(2100, 2, 29) # false (2100 is not a leap year) QDate.isValid(1202, 6, 6) # true (even though 1202 is pre-Gregorian)
- month()#
- 返回类型:
int
这是一个重载函数。
- month(cal)
- 参数:
cal –
QCalendar
- 返回类型:
int
返回日期的月份编号。
从1开始标注一年中的月份。如果提供,则使用
cal
作为日历,否则使用公历,其中月份编号如下1 = “一月”
2 = “二月”
3 = “三月”
4 = “四月”
5 = “五月”
6 = “六月”
7 = “七月”
8 = “八月”
9 = “九月”
10 = “十月”
11 = “十一月”
12 = “十二月”
如果日期无效,则返回0。请注意,一些历法在有些年份中可能有超过12个月的月份。
如果
lhs
和rhs
代表不同的日子,则返回true
;否则返回false
。参见
operator==()
如果
lhs
比rhs
早,则返回true
;否则返回false
。如果
lhs
比rhs
早或者相等,则返回true
;否则返回false
。如果
lhs
和rhs
代表同一天,则返回true
;否则返回false
。如果
lhs
比rhs
晚,则返回true
;否则返回false
。如果
lhs
晚于或等于rhs
,则返回true
;否则返回false
。- setDate(year, month, day)#
- 参数:
year – int
month – int
day – int
- 返回类型:
bool
将此日期设置为格里历格式的指定年、月和日。如果生成的日期有效,返回true,否则将此设置为表示无效日期并返回false。
- setDate(year, month, day, cal)
- 参数:
year – int
month – int
day – int
cal –
QCalendar
- 返回类型:
bool
将此日期设置为给定日历
cal
中的指定年、月和日。如果生成的日期有效,返回true,否则将此设置为表示无效日期并返回false。这是一个重载函数。
这是一个重载函数。
请使用
startOfDay(const QTimeZone &)
替代。返回今日的起始时刻。
一天的开始时间取决于时间的描述方式:对于远离UTC的时间偏移较高的地区,一天的开始和结束较早,而对于远离UTC时间偏移较低的地区,一天的开始和结束较晚。可以使用
spec
和offsetSeconds
(仅在spec
为Qt::OffsetSeconds时忽略)或通过时区来指定要使用的时间表示法。通常,一天的开始是午夜,即00:00:00;然而,如果由于本地时间的过渡导致指定的日期跳过了午夜(例如,夏令时春季向前跳过了一天中的第一小时),则返回该天中的实际最早时间。
当
spec
为OffsetFromUTC
时,offsetSeconds
给出的是隐含时区相对于UTC的偏移量。由于UTC和此类时区没有过渡,所以在这种情况下,一天的开始时间是QTime
(0, 0)。在极端情况下,如果某个日期完全被跳过(这种情况发生在某个位于国际日期变更线东部的区域转换为西部时),则返回值无效。将
TimeZone
作为spec
(而不是传递一个QTimeZone
对象)也会得到一个无效的结果,同样适用于日期超出QDateTime
可表示的范围。返回今日的起始时刻。
一天的开始取决于时间的描述方式:对于位于较西时区的那些人,每天的开始和结束时间较早;而对于位于较东时区的那些人,每天的开始和结束时间较晚。可以使用可选的时间
zone
来指定要使用的时间表示。默认的时间表示是系统的本地时间。通常,一天的开始是午夜,即00:00:然而,如果时区转换导致给定的日期跳过了那个午夜(例如,夏令时春季向前跳过当天第一小时),则返回当天的实际最早时间。这仅在时间表示为时区或本地时间时才可能发生。
当
zone
的timeSpec()为OffsetFromUTC
或UTC
时,时间表示没有转换,因此一天的开始为QTime
(0, 0)。在极端情况下,如果某个日期完全被跳过(这种情况发生在某个位于国际日期变更线东部的区域转换为西部时),则返回值无效。将无效的时区作为
zone
也会得到一个无效的结果,同样适用于日期超出QDateTime
可表示的范围。参见
- toJulianDay()#
- 返回类型:
int
将日期转换为儒略日。
- toPython()#
- 返回类型:
对象
- toString(format)#
- 参数:
format – str
- 返回类型:
字符串
这是一个重载函数。
- toString(format, cal)
- 参数:
format – str
cal –
QCalendar
- 返回类型:
字符串
- toString([format=Qt.TextDate])
- 参数:
format -
DateFormat
- 返回类型:
字符串
这是一个重载函数。
返回日期的字符串表示。参数
format
决定了字符串的格式。如果
格式
是TextDate
,字符串会按默认方式格式化。日和月份名称将为英文。这种格式的示例是“Sat May 20 1995”。有关本地化格式化,请参见toString()
。如果
格式
是ISODate
,字符串格式对应于 ISO 8601 扩展规范中的日期和时间表示,格式为 yyyy-MM-dd,其中 yyyy 是年份,MM 是年份的月份(介于 01 到 12 之间),dd 是月份的天数(介于 01 到 31 之间)。如果
格式
是RFC2822Date
,字符串将按照与 RFC 2822 兼容的方式格式化。这种格式的示例是“20 May 1995”。如果日期无效,将返回一个空字符串。
- toString(format)
- 参数:
format – str
- 返回类型:
字符串
这是一个重载函数。
- toString(format, cal)
- 参数:
format – str
cal –
QCalendar
- 返回类型:
字符串
- weekNumber()#
- 返回类型:
(week, yearNumber)
返回 ISO 8601 周数(1 到 53)。
如果日期无效,则返回 0。否则,返回日期的周数。如果
yearNumber
不是None
(其默认值),则将年份存储为 *``yearNumber``。根据 ISO 8601,每一周属于包含其大多数天的那一年,在格里高利历中。由于 ISO 8601 的周从星期一开始,这是周的四天所在的年份。大多数年份有 52 周,但有些年份有 53 周。
注
*``yearNumber`` 并不总是与
year()
相同。例如,2000 年 1 月 1 日的年份为 1999 年第 52 周,2002 年 12 月 31 日的年份为 2003 年第 1 周。参见
- year()#
- 返回类型:
int
这是一个重载函数。
- year(cal)
- 参数:
cal –
QCalendar
- 返回类型:
int
返回此日期的年份。
如果提供了,使用
cal
作为日历,否则使用公历。如果日期无效,则返回 0。对于某些日历,其第一年之前的日期可能都无效。
如果使用包含0年(有0年的日历),请使用
isValid()
方法检查返回值是否为0。这样的日历将以显而易见的方式使用负年数,其中年份1之前是年份0,之前是年份-1,依此类推。一些日历虽然没有0年,但在它们第一年之前有传统的年份编号,从1年开始倒数。例如,在推测性格里高利日历中,公元纪年(第一年)之前连续的年份被标识为1BC、2BC、3BC等等。对于这样的日历,负年数用于表示这些1年之前的年份,其中-1表示1年之前的年份。