1. 程式人生 > >PyQt5學習—2時間與日期

PyQt5學習—2時間與日期

PyQt5的日期和時間

PyQt5教程的這一部分展示瞭如何在PyQt5中使用日期和時間。

QDate,QTime,QDateTime

PyQt5有QDateQDateTimeQTime類與日期和時間工作。這QDate是一個在格里高利曆中使用日曆日期的類。它具有確定日期,比較或操縱日期的方法。該QTime課程以時鐘時間工作。它提供了比較時間,確定時間和各種其他時間操縱方法的方法。這QDateTime是一個將兩個 物件QDateQTime物件組合成一個物件的類。

當前日期和時間

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.DefaultLocaleLongDatetoString()

方法。

<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教程的這一部分中,我們使用了日期和時間。