欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PyQt5 教程 《日期和时间》

程序员文章站 2022-07-13 22:31:37
...

导读

目录

导读

PyQt5的日期和时间

QDate,QTime,QDateTime

当前日期和时间

UTC时间

天数

天数的差异

日期时间算术

夏令时

Unix时代

Julian day

历史战役


PyQt5的日期和时间

PyQt5教程的这一部分展示了如何在PyQt5中使用日期和时间。

QDate,QTime,QDateTime

PyQt5有QDateQDateTimeQTime类与日期和时间工作。这QDate是一个在calendar历中使用日历日期的类。它具有确定日期,比较或操纵日期的方法。该QTime课程与时钟时间一起工作。它提供了比较时间,确定时间和各种其他时间操纵方法的方法。这QDateTime是一个将两个 对象QDateQTime对象组合成一个对象的类。

 

当前日期和时间

PyQt5有currentDate()currentTime() 并currentDateTime()确定当前日期和时间的方法。

current_date_time.py
#!/usr/bin/python3

from PyQt5.QtCore import QDate, QTime, QDateTime, Qt

now = QDate.currentDate()

print(now.toString(Qt.ISODate))
print(now.toString(Qt.DefaultLocaleLongDate))

datetime = QDateTime.currentDateTime()

print(datetime.toString())

time = QTime.currentTime()

print(time.toString(Qt.DefaultLocaleLongDate))

输出如下:
2019-08-08
2019年8月8日
周四 8月 8 10:14:30 2019
10:14:30

该示例以各种格式打印当前日期,日期和时间以及时间。

now = QDate.currentDate()

currentDate() 方法 返回当前日期.

print(now.toString(Qt.ISODate))
print(now.toString(Qt.DefaultLocaleLongDate))

日期打印两种不同的格式Qt.ISODate 和Qt.DefaultLocaleLongDatetoString()方法

time = QTime.currentTime()

最后,currentTime()方法返回当前时间。

UTC时间

我们的星球是一个球体; 它绕着它的轴旋转。地球向东旋转,因此太阳在不同时间在不同位置上升。地球在大约24小时内旋转一次。因此,世界被划分为24个时区。在每个时区,都有不同的当地时间。夏令时通常会进一步修改本地时间。

全球时间有一个务实的需要。一个全球时间有助于避免混淆时区和夏令时。选择UTC(通用协调时间)作为主要时间标准。UTC用于航空,天气预报,飞行计划,空中交通管制许可和地图。与当地时间不同,UTC不会随着季节的变化而变化。

utc_local.py
#!/usr/bin/python3

from PyQt5.QtCore import QDateTime, Qt

now = QDateTime.currentDateTime()

print("Local datetime: ", now.toString(Qt.ISODate))
print("Universal datetime: ", now.toUTC().toString(Qt.ISODate))

print("The offset from UTC is: {0} seconds".format(now.offsetFromUtc()))

该示例确定当前的通用和本地日期和时间。

print(“Local datetime:”,now.toString(Qt.ISODate))

currentDateTime()方法返回以当地时间表示的当前日期和时间。我们可以使用toLocalTime()它将通用时间转换为本地时间。

print(“Universal datetime:”,now.toUTC()。toString(Qt.ISODate))

我们toUTC()从日期时间对象获得了该方法的通用时间。

print(“与UTC的偏移量为:{0}秒”.format(now.offsetFromUtc()))

offsetFromUtc()给通用时间在几秒钟内本地时间之间的区别。

$ ./utc_local.py 
Local datetime:  2019-08-08T10:31:37
Universal datetime:  2019-08-08T02:31:37Z
The offset from UTC is: 28800 seconds

天数

daysInMonth() 方法返回特定月份中的天数,并通过该方法返回一年中的天数daysInYear()

days.py
#!/usr/bin/python3

from PyQt5.QtCore import QDate, Qt

now = QDate.currentDate()

d = QDate(1945, 5, 7)

print("Days in month: {0}".format(d.daysInMonth()))
print("Days in year: {0}".format(d.daysInYear()))

该示例打印所选日期的月份和年份的天数。

Days in month: 31
Days in year: 365

天数的差异

daysTo()方法返回从日期到另一个日期的天数。

xmas.py
#!/usr/bin/python3

from PyQt5.QtCore import QDate

xmas1 = QDate(2016, 12, 24)
xmas2 = QDate(2017, 12, 24)

now = QDate.currentDate()

dayspassed = xmas1.daysTo(now)
print("{0} days have passed since last XMas".format(dayspassed))

nofdays = now.daysTo(xmas2)
print("There are {0} days until next XMas".format(nofdays))

该示例计算从上次XMas传递的天数和到下一个XMas的天数。输出如下:

957 days have passed since last XMas
There are -592 days until next XMas

日期时间算术

我们经常需要在日期时间值中添加或减去天,秒或年。

arithmetic.py
#!/usr/bin/python3

from PyQt5.QtCore import QDateTime, Qt

now = QDateTime.currentDateTime()

print("Today:", now.toString(Qt.ISODate))
print("Adding 12 days: {0}".format(now.addDays(12).toString(Qt.ISODate)))
print("Subtracting 22 days: {0}".format(now.addDays(-22).toString(Qt.ISODate)))

print("Adding 50 seconds: {0}".format(now.addSecs(50).toString(Qt.ISODate)))
print("Adding 3 months: {0}".format(now.addMonths(3).toString(Qt.ISODate)))
print("Adding 12 years: {0}".format(now.addYears(12).toString(Qt.ISODate)))

该示例确定当前日期时间并添加或减去天,秒,月和年。输出如下:

Today: 2019-08-08T10:40:46
Adding 12 days: 2019-08-20T10:40:46
Subtracting 22 days: 2019-07-17T10:40:46
Adding 50 seconds: 2019-08-08T10:41:36
Adding 3 months: 2019-11-08T10:40:46
Adding 12 years: 2031-08-08T10:40:46

夏令时

夏令时(DST)是在夏季推进时钟的做法,以便晚上的日光持续更长时间。时间在春天开始向前调整一小时,在秋天向后调整到标准时间。

daylight_saving.py
#!/usr/bin/python3

from PyQt5.QtCore import QDateTime, QTimeZone, Qt

now = QDateTime.currentDateTime()

print("Time zone: {0}".format(now.timeZoneAbbreviation()))

if now.isDaylightTime():
    print("The current date falls into DST time")
else:
    print("The current date does not fall into DST time")

该示例检查日期时间是否为夏令时。

print("Time zone: {0}".format(now.timeZoneAbbreviation()))

timeZoneAbbreviation()方法返回datetime的时区缩写。

if now.isDaylightTime():

isDaylightTime()如果日期时间属于夏令时 ,则返回。

Time zone: 中国标准时间
The current date does not fall into DST time

当前日期属于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
#!的/ 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))

该示例打印Unix时间并将其转换回QDateTime

now = QDateTime.currentDateTime()

首先,我们检索当前的日期和时间。

unix_time = now.toSecsSinceEpoch()

toSecsSinceEpoch()返回Unix时间。

d = QDateTime.fromSecsSinceEpoch(unix_time)

随着fromSecsSinceEpoch()我们将Unix时间转换为QDateTime。输出如下:

$ ./unix_time.py 
1505129851
2017-09-11T13:37:31

Julian day

朱利安日指的是自朱利安时期开始以来的连续天数。它主要由天文学家使用。它不应该与朱利安历法相混淆。朱利安时期始于公元前4713年。朱利安日数0被分配给从公元前4713年1月1日中午开始的那一天。

朱利安日编号(JDN)是自此期间开始以来经过的天数。任何时刻的朱利安日期(JD)是前一个正午的朱利安日数加上该瞬间以来的一天的分数。(Qt不计算这个分数。)除了天文学,朱利安日期经常被军事和大型机程序使用。

julian_day.py
#!/usr/bin/python3

from PyQt5.QtCore import QDate, Qt

now = QDate.currentDate()

print("Gregorian date for today: ", now.toString(Qt.ISODate))
print("Julian day for today: ", now.toJulianDay()) 

在这个例子中,我们计算今天的格里高利日和朱利安日。

print(“Julian day for today:”,now.toJulianDay())

使用该toJulianDay()方法返回Julian日。输出如下:

Gregorian date for today:  2019-08-08
Julian day for today:  2458704

历史战役

在朱利安日,可以进行跨越几个世纪的计算。

battles.py
#!/usr/bin/python3

from PyQt5.QtCore import 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("Days since Slavkov battle: {0}".format(d1))
print("Days since Borodino battle: {0}".format(d2))

该示例计算自两个历史事件以来经过的天数。

borodino_battle = QDate(1812, 9, 7)
slavkov_battle = QDate(1805, 12, 2)

我们有两个拿破仑时代的战争日期。

j_today = now.toJulianDay()
j_borodino = borodino_battle.toJulianDay()
j_slavkov = slavkov_battle.toJulianDay()

我们计算今天的朱利安时代以及斯拉夫科夫和波罗底诺的战役。

d1 = j_today - j_slavkov
d2 = j_today - j_borodino

我们计算了两次战斗以来的天数。

$ ./battles.py 
Days since Slavkov battle: 77350
Days since Borodino battle: 74879

当我们运行这个脚本时,自Slavkov战役以来已经过了77350天,而自Borodino战斗以来已经过了74878天。