[PyQt5] 시간, 날짜,

2020. 2. 11. 16:44IT/PyQt5

날짜와 시간을 계산하는 것은 프로그램의 기본이다. 

 

from PyQt5.QtCore import QDate, Qt

now = QDate.currentDate()
print(f'-> now : {now.toString()}')
print(f'-> now yy-M-d : {now.toString("yy-M-d")}')
print(f'-> now yyyy-MMMM-ddd : {now.toString("yyyy-MMMM-ddd")}')
print(f'-> now ISODate : {now.toString(Qt.ISODate)}')
print(f'-> now DefaultLocal : {now.toString(Qt.DefaultLocaleLongDate)}')

출력하는 포멧에 맞추어 날짜가 변경되는 것을 볼 수 있습니다.  그냥 now만 출력하면 이상한 순서로 나오는 반면 포멧을 지정하면 알아보기 쉽게 변경되는 것을 볼 수 있습니다. 포맷 양식도 단순한 편인데, yyyy-mm-dd 라고 하면 일반적으로 자주 쓰는 양식으로 나옵니다.  다른 포멧에 대한 정보는 아래 링크에서 확인할 수 있습니다.

 

QString QDate::toString : https://doc.qt.io/qt-5/qdate.html#toString

 

QDate Class | Qt Core 5.14.1

QDate Class The QDate class provides date functions. More... Header: #include qmake: QT += core Note: All functions in this class are reentrant. Public Types Public Functions QDate(int y, int m, int d) QDate() QDate addDays(qint64 ndays) const QDate addMon

doc.qt.io

d The day as a number without a leading zero (1 to 31)
dd The day as a number with a leading zero (01 to 31)
ddd The abbreviated localized day name (e.g. 'Mon' to 'Sun'). Uses the system locale to localize the name, i.e. QLocale::system().
dddd The long localized day name (e.g. 'Monday' to 'Sunday'). Uses the system locale to localize the name, i.e. QLocale::system().
M The month as a number without a leading zero (1 to 12)
MM The month as a number with a leading zero (01 to 12)
MMM The abbreviated localized month name (e.g. 'Jan' to 'Dec'). Uses the system locale to localize the name, i.e. QLocale::system().
MMMM The long localized month name (e.g. 'January' to 'December'). Uses the system locale to localize the name, i.e. QLocale::system().
yy The year as a two digit number (00 to 99)
yyyy The year as a four digit number. If the year is negative, a minus sign is prepended, making five characters.

Any sequence of characters enclosed in single quotes 

 

 

from PyQt5.QtCore import QTime, Qt

time = QTime.currentTime()
print(f'-> time : {time.toString()}')
print(f'-> time h:m:s : {time.toString("h:m:s")}')
print(f'-> time hh:mm:ss.zzz : {time.toString("hh:mm:ss.zzz")}')
print(f'-> Qt.DefaultLocaleLongDate : {Qt.DefaultLocaleLongDate}')
print(f'-> time DefaultLong : {time.toString(Qt.DefaultLocaleLongDate)}')
print(f'-> time DefaultShort : {time.toString(Qt.DefaultLocaleShortDate)}')

마찬가지 원리로 시간도 원하는 포멧으로 표시할 수 있습니다. 이거 저거 햇갈린다면 h:m:s 을 사용하는게 푠리합니다. 참고로 소문자 h는 1~12시 까지 나오지만 대문자 H는 1~24시 까지 나옵니다. 

 

 

from PyQt5.QtCore import QDateTime

datetime = QDateTime.currentDateTime()
print(f'-> datetime : {datetime.toString()}')
print(f'-> datetime yy-M-d h:m:s : {datetime.toString("yy-M-d h:m:s")}')
print(f'-> datetime yyyy-MM-dd hh:mm:ss.zzz : {datetime.toString("yyyy-MM-dd hh:mm:ss.zzz")}')
print(f'-> datetime DefaultLong : {datetime.toString(Qt.DefaultLocaleLongDate)}')
print(f'-> datetime DefaultShort : {datetime.toString(Qt.DefaultLocaleShortDate)}')

datetime은 date와 time을 하나로 합친것 입니다. date 따로 time 따로 구하는 수고를 덜어주고자 만든 기능입니다. 포맷은 위에 나와있는 것과 동일합니다.

 

 

 

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import QDateTime, Qt

class statusDateApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.datetime = QDateTime.currentDateTime()
        self.initUI()

    def initUI(self):
        self.statusBar().showMessage(self.datetime.toString(Qt.DefaultLocaleShortDate))
        self.setWindowTitle('상태바 날짜')
        self.setGeometry(500, 500, 300, 200)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = statusDateApp()
    sys.exit(app.exec_())


 

위 내용을 조합해서 상태바에 날짜와 시간을 표시하는 기능입니다. 초기화할 때 datetime을 만들어 놓고 상태바 단계에서 표시합니다.