PyQt5的日期和时间
PyQt5教程的这一部分展示了如何在PyQt5中使用日期和时间。
QDate,QTime,QDateTime
PyQt5有QDate
,QDateTime
,QTime
类与日期和时间工作。这QDate
是一个在格里高利历中使用日历日期的类。它具有确定日期,比较或操纵日期的方法。该QTime
课程以时钟时间工作。它提供了比较时间,确定时间和各种其他时间操纵方法的方法。这QDateTime
是一个将两个 对象QDate
和QTime
对象组合成一个对象的类。
当前日期和时间
PyQt5有currentDate()
,currentTime()
并currentDateTime()
确定当前日期和时间的方法。
current_date_time.py
<span style="color:#000000">#!的/ usr / bin中/ python3
来自PyQt5.QtCore导入QDate,QTime,QDateTime,Qt
now = QDate.currentDate()
打印(now.toString(Qt.ISODate))
打印(now.toString(Qt.DefaultLocaleLongDate))
datetime = QDateTime.currentDateTime()
打印(则DateTime.ToString())
time = QTime.currentTime()
打印(time.toString(Qt.DefaultLocaleLongDate))
</span>
该示例以各种格式打印当前日期,日期和时间以及时间。
<span style="color:#000000">now = QDate.currentDate()
</span>
该currentDate()
方法返回当前日期。
<span style="color:#000000">打印(now.toString(Qt.ISODate))
打印(now.toString(Qt.DefaultLocaleLongDate))
</span>
日期通过使值被印刷在两种不同的格式Qt.ISODate
和Qt.DefaultLocaleLongDate
到toString()
方法。
<span style="color:#000000">datetime = QDateTime.currentDateTime()
</span>
将currentDateTime()
返回当前日期和时间。
<span style="color:#000000">time = QTime.currentTime()
</span>
最后,currentTime()方法返回当前时间。
$ ./current_date_time.py
2017年9月11日
2017年9月11日星期一
星期一9月11日12:37:45 2017
12:37:45 CEST
这是输出。
UTC时间
我们的星球是一个球体; 它绕着它的轴旋转。地球向东旋转,因此太阳在不同时间在不同位置上升。地球在大约24小时内旋转一次。因此,世界被划分为24个时区。在每个时区,都有不同的当地时间。夏令时通常会进一步修改本地时间。
全球时间有一个务实的需要。一个全球时间有助于避免混淆时区和夏令时。选择UTC(通用协调时间)作为主要时间标准。UTC用于航空,天气预报,飞行计划,空中交通管制许可和地图。与当地时间不同,UTC不会随着季节的变化而变化。
utc_local.py
<span style="color:#000000">#!的/ usr / bin中/ python3
来自PyQt5.QtCore导入QDateTime,Qt
now = QDateTime.currentDateTime()
print(“Local datetime:”,now.toString(Qt.ISODate))
print(“Universal datetime:”,now.toUTC()。toString(Qt.ISODate))
print(“与UTC的偏移量为:{0}秒”.format(now.offsetFromUtc()))
</span>
该示例确定当前的通用和本地日期和时间。
<span style="color:#000000">print(“Local datetime:”,now.toString(Qt.ISODate))
</span>
该currentDateTime()
方法返回以当地时间表示的当前日期和时间。我们可以使用toLocalTime()
它将通用时间转换为本地时间。
<span style="color:#000000">print(“Universal datetime:”,now.toUTC()。toString(Qt.ISODate))
</span>
我们toUTC()
从日期时间对象获得了该方法的通用时间。
<span style="color:#000000">print(“与UTC的偏移量为:{0}秒”.format(now.offsetFromUtc()))
</span>
在offsetFromUtc()
给通用时间在几秒钟内本地时间之间的区别。
$ ./utc_local.py
当地日期时间:2017-09-11T13:01:58
通用日期:2017-09-11T11:01:58Z
UTC的偏移量为:7200秒
这是输出。
天数
该daysInMonth()
方法返回特定月份中的天数,并通过该方法返回一年中的天数daysInYear()
。
days.py
<span style="color:#000000">#!的/ usr / bin中/ python3
来自PyQt5.QtCore导入QDate,Qt
now = QDate.currentDate()
d = QDate(1945,5,7)
print(“Days in month:{0}”。format(d.daysInMonth()))
print(“年内的日期:{0}”。格式(d.daysInYear()))
</span>
该示例打印所选日期的月份和年份的天数。
$ ./days.py
每月的天数:31
一年中的天数:365
这是输出。
天数的差异
该daysTo()
方法返回从日期到另一个日期的天数。
xmas.py
<span style="color:#000000">#!的/ usr / bin中/ python3
来自PyQt5.QtCore导入QDate
xmas1 = QDate(2016,12,24)
xmas2 = QDate(2017,12,24)
now = QDate.currentDate()
dayspassed = xmas1.daysTo(now)
print(“自上次XMas以来已经过了{0}天”.format(dayspassed))
nofdays = now.daysTo(xmas2)
print(“下一个XMas有{0}天”.format(nofdays))
</span>
该示例计算从上次XMas传递的天数和到下一个XMas的天数。
<span style="color:#000000">$ ./xmas.py
自上次XMas以来已过去261天
距离下一个XMas有104天
</span>
这是输出。
日期时间算术
我们经常需要在日期时间值中添加或减去天,秒或年。
arithmetic.py
<span style="color:#000000">#!的/ usr / bin中/ python3
来自PyQt5.QtCore导入QDateTime,Qt
now = QDateTime.currentDateTime()
print(“今天:”,now.toString(Qt.ISODate))
print(“添加12天:{0}”。format(now.addDays(12).toString(Qt.ISODate)))
print(“减去22天:{0}”。format(now.addDays(-22).toString(Qt.ISODate)))
print(“添加50秒:{0}”。format(now.addSecs(50).toString(Qt.ISODate)))
print(“添加3个月:{0}”。format(now.addMonths(3).toString(Qt.ISODate)))
print(“添加12年:{0}”。format(now.addYears(12).toString(Qt.ISODate)))
</span>
该示例确定当前日期时间并添加或减去天,秒,月和年。
$ ./arithmetics.py
今天:2017-09-11T13:15:24
新增12天:2017-09-23T13:15:24
减去22天:2017-08-20T13:15:24
加50秒:2017-09-11T13:16:14
增加3个月:2017-12-11T13:15:24
增加12年:2029-09-11T13:15:24
这是示例输出。
夏令时
夏令时(DST)是在夏季推进时钟的做法,以便晚上的日光持续更长时间。时间在春天开始向前调整一小时,在秋天向后调整到标准时间。
daylight_saving.py
<span style="color:#000000">#!的/ usr / bin中/ python3
来自PyQt5.QtCore导入QDateTime,QTimeZone,Qt
now = QDateTime.currentDateTime()
print(“时区:{0}”。format(now.timeZoneAbbreviation()))
如果now.isDaylightTime():
打印(“当前日期属于DST时间”)
其他:
print(“当前日期不属于DST时间”)
</span>
该示例检查日期时间是否为夏令时。
<span style="color:#000000">print(“时区:{0}”。format(now.timeZoneAbbreviation()))
</span>
该timeZoneAbbreviation()
方法返回datetime的时区缩写。
<span style="color:#000000">如果now.isDaylightTime():
</span>
isDaylightTime()
如果日期时间属于夏令时 ,则返回。
$ ./daylight_saving.py
时区:CEST
当前日期属于DST时间
目前的日期属于DST时间该计划于夏季在布拉迪斯拉发执行,该市是中欧的一个城市。中欧夏令时(CEST)比通用时间提前2小时。此时区是夏令时时区,用于欧洲和南极洲。冬季使用的标准时间是中欧时间(CET)。
Unix时代
时代是被选为特定时代起源的瞬间。例如,在西方基督教国家,时间纪元从耶稣出生的第0天开始。另一个例子是法国共和党日历,使用了12年。这个时代是共和党时代的开始,共和党时代于1792年9月22日宣布,即第一共和国宣布和君主制废除的那一天。
计算机也有它们的时代。其中最受欢迎的是Unix时代。Unix纪元是1970年1月1日(或1970- 01-01T00:00:00Z ISO 8601)的00:00:00 UTC时间。计算机中的日期和时间根据自该计算机或平台的定义时期以来经过的秒数或时钟滴答数确定。
Unix时间是自Unix纪元以来经过的秒数。
$ date +%s
1505128973
Unix date命令可用于获取Unix时间。在这个特殊时刻,自Unix时代以来已经过了1505128973秒。
unix_time.py
<span style="color:#000000">#!的/ usr / bin中/ python3
来自PyQt5.QtCore导入QDateTime,Qt
now = QDateTime.currentDateTime()
unix_time = now.toSecsSinceEpoch()
打印(unix_time)
d = QDateTime.fromSecsSinceEpoch(unix_time)
打印(d.toString(Qt.ISODate))
</span>
该示例打印Unix时间并将其转换回QDateTime
。
<span style="color:#000000">now = QDateTime.currentDateTime()
</span>
首先,我们检索当前的日期和时间。
<span style="color:#000000">unix_time = now.toSecsSinceEpoch()
</span>
在toSecsSinceEpoch()
返回Unix时间。
<span style="color:#000000">d = QDateTime.fromSecsSinceEpoch(unix_time)
</span>
随着fromSecsSinceEpoch()
我们将Unix时间转换为QDateTime
。
$ ./unix_time.py
1505129851
2017-09-11T13:37:31
这是输出。
朱利安日
朱利安日指的是自朱利安时期开始以来的连续天数。它主要由天文学家使用。它不应该与儒略历相混淆。朱利安时期始于公元前4713年。朱利安日数0分配给从公元前4713年1月1日中午开始的那一天。
朱利安日编号(JDN)是自此期间开始以来经过的天数。任何时刻的朱利安日期(JD)是前一个正午的朱利安日数加上该时刻以来的一天的分数。(Qt不计算这个分数。)除了天文学,朱利安日期经常被军事和大型机程序使用。
julian_day.py
<span style="color:#000000">#!的/ usr / bin中/ python3
来自PyQt5.QtCore导入QDate,Qt
now = QDate.currentDate()
print(“今天的格里高利日期:”,now.toString(Qt.ISODate))
print(“Julian day for today:”,now.toJulianDay())
</span>
在这个例子中,我们计算今天的格里高利日和儒略日。
<span style="color:#000000">print(“Julian day for today:”,now.toJulianDay())
</span>
使用该toJulianDay()
方法返回Julian日。
$ ./julianday.py
今日格里高利时间:2017-09-11
今日朱利安日:2458008
这是输出。
历史战役
在朱利安日,可以进行跨越几个世纪的计算。
battles.py
<span style="color:#000000">#!的/ usr / bin中/ python3
来自PyQt5.QtCore导入QDate,Qt
borodino_battle = QDate(1812,9,7)
slavkov_battle = QDate(1805,12,2)
now = QDate.currentDate()
j_today = now.toJulianDay()
j_borodino = borodino_battle.toJulianDay()
j_slavkov = slavkov_battle.toJulianDay()
d1 = j_today - j_slavkov
d2 = j_today - j_borodino
print(“自Slavkov战斗以来的日子:{0}”。格式(d1))
print(“自Borodino战斗以来的日子:{0}”。格式(d2))
</span>
该示例计算自两个历史事件以来经过的天数。
<span style="color:#000000">borodino_battle = QDate(1812,9,7)
slavkov_battle = QDate(1805,12,2)
</span>
我们有两个拿破仑时代的战争日期。
<span style="color:#000000">j_today = now.toJulianDay()
j_borodino = borodino_battle.toJulianDay()
j_slavkov = slavkov_battle.toJulianDay()
</span>
我们计算今天的朱利安时代以及斯拉夫科夫和波罗底诺的战役。
<span style="color:#000000">d1 = j_today - j_slavkov
d2 = j_today - j_borodino
</span>
我们计算自两场战斗以来经过的天数。
$ ./battles.py
自斯拉夫科夫战役以来的日子:77350
自波罗底诺战争以来的日子:74879
当我们运行这个脚本时,自Slavkov战斗以来已经过了77350天,而自Borodino战斗以来已经过了74878天。
在PyQt5教程的这一部分中,我们使用了日期和时间。