PyQt6剑指未来-日期和时间

news2024/11/22 21:32:42

请添加图片描述

前言

时间和日期是软件开发中非常重要的概念。在PyQt6中,时间和日期模块提供了处理日期、时间和日期时间的类和函数,以及管理时区和夏令时的特性。这些模块提供了可靠和易于使用的工具,使得在PyQt6中处理和呈现时间和日期的操作变得轻松起来。因此,本篇博客将介绍PyQt6时间日期模块的用法和功能,包括QDateTime、QDate、QTime和QTimeZone等类以及一些常用方法。

QDate, QTime, QDateTime

PyQt6 有 QDate, QDateTime, QTime 类处理日期和时间。

  • QDate 是用于处理公历中的日期的类。它有获取、比较或操作日期的方法。
  • QTime 类用于处理时间。它提供了比较时间、确定时间和其他各种时间操作方法。
  • QDateTime 是 QDate 和 QTime 的组合。

PyQt 当前日期和时间

PyQt6 有 currentDate、currentTime 和 currentDateTime 方法获取当前的日期或时间。

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

now = QDate.currentDate()

print(now.toString())
print(now.toString(Qt.DateFormat.ISODate))
print(now.toString(Qt.DateFormat.RFC2822Date))

datetime = QDateTime.currentDateTime()

print(datetime.toString())

time = QTime.currentTime()
print(time.toString(Qt.DateFormat.ISODate))

上面的代码打印出了当前日期,当前日期和时间,不同格式的时间。
输出为:

Sun Apr 30 2023
2023-04-30
30 Apr 2023
Sun Apr 30 14:23:18 2023
14:23:18

PyQt6 UTC 时间

我们的星球是一个球体,绕着它自己的轴旋转。地球向东旋转,所以太阳在不同的时间在不同的地点升起。地球大约每24小时自转一次。因此,世界被划分为24个时区。在每个时区,都有不同的当地时间。当地时间通常会被夏时制进一步修改。

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

本例获取了标准时间和本地时间:

from PyQt6.QtCore import QDateTime, Qt

now = QDateTime.currentDateTime()

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

print(f'The offset from UTC is: {now.offsetFromUtc()} seconds')

currentDateTime 方法返回了本地时间的当前时间。我们可以使用 toLocalTime 方法把标准时间转换成本地时间。
代码如下:

print('Local datetime: ', now.toString(Qt.DateFormat.ISODate))

我们使用 toUTC 方法从时间对象里获取了标准时间。

print('Universal datetime: ', now.toUTC().toString(Qt.DateFormat.ISODate))

offsetFromUtc 方法给出了本地时间与标准时间的差,以秒为单位。

print(f'The offset from UTC is: {now.offsetFromUtc()} seconds')

综合输出结果如下:

Local datetime:  2023-04-30T14:26:28
Universal datetime:  2023-04-30T06:26:28Z
The offset from UTC is: 28800 seconds

PyQt6 天数

daysInMonth 方法返回了指定月份的天数,daysInYear 方法返回了指定年份的天数。

from PyQt6.QtCore import QDate

now = QDate.currentDate()

d = QDate(2023, 5, 7)

print(f'Days in month: {d.daysInMonth()}')
print(f'Days in year: {d.daysInYear()}')

结果为:

Days in month: 31
Days in year: 365

PyQt6 天数差

daysTo 方法返回了一个日期到另外一个日期的差。

from PyQt6.QtCore import QDate, Qt

now = QDate.currentDate()
y = now.year()

print(f'today is {now.toString(Qt.DateFormat.ISODate)}')

xmas1 = QDate(y, 1, 1)
xmas2 = QDate(y+1, 1, 1)

dayspassed = xmas1.daysTo(now)
print(f'{dayspassed} days have passed since last 元旦')

nofdays = now.daysTo(xmas2)
print(f'There are {nofdays} days until next 元旦')

该示例计算出了从上一个元旦到下一个元旦的天数。

today is 2023-04-30
119 days have passed since last 元旦
There are 246 days until next 元旦

PyQt6 时间的计算

我们经常需要对天,秒或者年进行加减等计算。

from PyQt6.QtCore import QDateTime, Qt

now = QDateTime.currentDateTime()

print(f'Today: {now.toString(Qt.DateFormat.ISODate)}')
print(f'Adding 12 days: {now.addDays(12).toString(Qt.DateFormat.ISODate)}')
print(f'Subtracting 22 days: {now.addDays(-22).toString(Qt.DateFormat.ISODate)}')

print(f'Adding 50 seconds: {now.addSecs(50).toString(Qt.DateFormat.ISODate)}')
print(f'Adding 3 months: {now.addMonths(3).toString(Qt.DateFormat.ISODate)}')
print(f'Adding 12 years: {now.addYears(12).toString(Qt.DateFormat.ISODate)}')

该示例展示了对当前日期时间添加或减去天、秒、月或年。

Today: 2023-04-30T14:40:42
Adding 12 days: 2023-05-12T14:40:42
Subtracting 22 days: 2023-04-08T14:40:42
Adding 50 seconds: 2023-04-30T14:41:32
Adding 3 months: 2023-07-30T14:40:42
Adding 12 years: 2035-04-30T14:40:42

PyQt6 daylight saving time

夏令时 (DST) 是在夏季调快时间,使晚上变得更长。 初春时调前调一小时,秋季时调后调至标准时间。

该例判断一个时间是不是夏令时。

from PyQt6.QtCore import QDateTime, QTimeZone, Qt

now = QDateTime.currentDateTime()

print(f'Time zone: {now.timeZoneAbbreviation()}')

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

timeZoneAbbreviation 方法返回了时区的缩写。

print(f'Time zone: {now.timeZoneAbbreviation()}')

isDaylightTime 判断日期是不是夏令时。

if now.isDaylightTime():
...

当前日期不属于夏令时时间

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

PyQt6 unix 纪元

纪元是被选为特定纪元起源的时间瞬间。 例如,在西方基督教国家,时间纪元从耶稣诞生的第 0 天开始。 另一个例子是使用了十二年的法国共和历。 这个时代是共和时代的开始,1792 年 9 月 22 日宣布第一共和国成立,君主制也被废除。

计算机也有它的时代。 最受欢迎的时代之一是 Unix 时代。 Unix 纪元是 1970 年 1 月 1 日 UTC 时间 00:00:00(或 1970-01-01T00:00:00Z ISO 8601)。 计算机中的日期和时间是根据自该计算机或平台定义的纪元以来经过的秒数或时钟滴答数确定的。

Unix 时间是自 Unix 纪元以来经过的秒数。

Unix date 命令可用于获取 Unix 时间。 在这个特殊的时刻,自 Unix 时代以来已经过去了 1682837309秒

from PyQt6.QtCore import QDateTime, Qt

now = QDateTime.currentDateTime()

unix_time = now.toSecsSinceEpoch() 
print(unix_time)

d = QDateTime.fromSecsSinceEpoch(unix_time)
print(d.toString(Qt.DateFormat.ISODate))
1682837309
2023-04-30T14:48:29

PyQt6 Julian day

儒略日是指自儒略时期开始以来的连续天数。 它主要由天文学家使用。 它不应与儒略历混淆。 它开始于公元前 4713 年。第 0 天是公元前 4713 年 1 月 1 日中午的那天。

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

from PyQt6.QtCore import QDate, Qt

now = QDate.currentDate()

print('Gregorian date for today:', now.toString(Qt.DateFormat.ISODate))
print('Julian day for today:', now.toJulianDay())
Gregorian date for today: 2023-04-30
Julian day for today: 2460065

历史战役

使用儒略日可以进行跨越几个世纪的计算。

from PyQt6.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(f'Days since Slavkov battle: {d1}')
print(f'Days since Borodino battle: {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
Days since Slavkov battle: 79407
Days since Borodino battle: 76936

当我们运行这个脚本时,距离斯拉夫科夫战役已经过去了 79407天,距离博罗季诺战役已经过去了 76936天。

更多全套pyqt资源配套代码获取,公众号编程启航发送pyqt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/477645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java中Lambda表达式(初学到精通)

目录 一、Lambda表达式是什么?什么场景下使用Lambda? 1.Lambda 表达式是什么 2.函数式接口是什么 第二章、怎么用Lambda 1.必须有一个函数式接口 2.省略规则 3.Lambda经常用来和匿名内部类比较 第三章、具体使用举例() 1.案…

跳跃游戏类题目 总结篇

一.跳跃游戏类题目简单介绍 跳跃游戏是一种典型的算法题目,经常是给定一数组arr,从数组的某一位置i出发,根据一定的跳跃规则,比如从i位置能跳arr[i]步,或者小于arr[i]步,或者固定步数,直到到达某…

C++ 链表概述

背景 当需要存储大量数据并需要对其进行操作时,常常需要使用到链表这种数据结构。它可以用来存储一系列的元素并支持插入、删除、遍历等操作。 概念 一般来说,链表是由若干个节点组成的,每个节点包含了两个部分的内容:存储的数…

【嵌入式环境下linux内核及驱动学习笔记-(6-内核 I/O)-阻塞与非阻塞】

目录 1、阻塞与非阻塞1.1 以对recvfrom函数的调用及执行过程来说明阻塞的操作。1.2 以对recvfrom函数的不断轮询调用为例,说明非阻塞时进程的行为。1.3 简单介绍内核链表及等待队列1.4 等待队列1.4.1 定义等待队列头部(wait_queue_head_t)1.4…

vue动态添加多组数据添加正则限制

如图新增多条数据,如果删除其中一条正则校验失败的数据,提示不会随之删除,若想提示删除并不清空数据 delete (item, index) {this.applicationForm.reserveInfo.forEach((v, i) > {if (i index) {this.$refs.formValidate.fields.forEac…

UFT——操作模块

示例一 创建一个可重复利用的登录测试更改Action的名称。使用本地数据表。创建一个主调用测试。建立测试迭代。处理缺失的Action。 分析:就是创建一个只有登录的测试起名为login,然后在创建一个主测试起名字比如main,在main中,调用…

微信小程序定义模板

微信小程序提供模板(template)功能,把一些可以共用的,复用的代码在模板中定义为代码片段,然后在不同的地方调用,可以实现一次编写,多次引用的效果。 首先我们看一下官网是如何操作的 一般的情…

笔记:对多维torch进行任意维度的多“行”操作

如何取出多维torch指定维度的指定“行” 从二维torch开始新建torch取出某一行取出某一列一次性取出多行取出连续的多行取出不连续的多行 一次取出多列取出连续的多列取出不连续的多列 考虑三维torch取出三维torch的任意两行(means 在dim0上操作)取出连续…

( 字符串) 9. 回文数 ——【Leetcode每日一题】

❓9. 回文数 难度:简单 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如…

Git的安装与使用+Git在IDEA中的使用

文章目录 一、Git概述1、版本控制器的方式2、Git的工作流程图 二、Git的安装与常用命令1、Git环境安装2、Git环境基本配置3、获取本地仓库4、基础操作指令 三、分支1、常用指令2、解决合并冲突 四、Git远程仓库1、创建远程仓库2、远程操作仓库3、冲突处理 四、IDEA中使用Git1、…

数据结构——二叉树

二叉树 1 二叉树的种类 1.1 满二叉树 节点数量为 2^k - 1 (k是树的深度,底层的叶子节点都是满的) 1.2 完全二叉树 完全二叉树是指除了下面一层外,其余层的节点都是满的; 且最下面一层的叶子节点是从左到右连续的。 下面这个…

pci总线协议学习笔记——PCI总线基本概念

1、pci总线概述 (1)PCI,外设组件互连标准(Peripheral Component Interconnection),是一种由英特尔(Intel)公司1991年推出的用于定义局部总线的标准; (2)最早提出的PCI总线工作在33MHz频率之下,传输带宽达到133MB/s(33M…

【LeetCode】236. 二叉树的最近公共祖先

1.问题 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是…

1992-2022年31省GDP、第一产业增加值、第二产业增加值 第三产业增加值

1992-2022年31省GDP、第一产业增加值、第二产业增加值 第三产业增加值 1、时间:1992-2022年 2、范围:包括31省 3、指标:省GDP、省第一产业增加值、省第二产业增加值、省第三产业增加值 4、缺失情况说明:无缺失 5、来源&#…

【python知识】__init__.py的来龙去脉

一、说明 我们常见__init__.py文件,但说不清楚它的用途,在本文,我将首先把它的来龙去脉说清楚,然后告诉大家,如何编制python工程,培养全局的编程格局。 二、包-模块-函数结构 在Python工程里,当…

playwright连接已有浏览器操作

文章目录 playwright连接已有浏览器操作前置准备打开本地已有缓存的Chrome(理解)指定端口打开浏览器连接指定端口已启动浏览器(推荐) playwright连接已有浏览器操作 前置准备 pip install playwright # 安装playwright的python…

红黑树数据结构

现在JAVASE中HashMap中底层源码是由数组链表红黑树进行设计的,然后很多地方也是用到红黑树,这里单独对红黑树数据结构进行简单的介绍。 目录 红黑树概念 红黑树的性质 自平衡规则 代码 红黑树概念 红黑树,是一种二叉搜索树,…

linux常用命令大全(保姆及入门)

linux常用命令大全 一、文件处理命令1、目录处理命令:ls2、目录处理命令2.1 mkdir2.2 pwd2.3 rmdir2.4 cp2.5 mv2.6 rm 3.文件处理命令3.1 touch3.2 cat3.3 tac3.4 more3.5 less3.6 head3.7 tail 4.链接命令4.1 ln 二、权限管理命令2.1 chmod2.2 chown2.3 chgrp 2.4…

VRPTW:新雀优化算法NOA求解带时间窗的车辆路径问题

一、新雀优化算法NOA求解带时间窗的车辆路径问题 1.1VRPTW模型如下: 带时间窗的车辆路径问题(Vehicle Routing Problem with Time Windows, VRPTW) 1.2新雀优化算法NOA求解VRPTW close all clear clc SearchAgents_no30; % 种群大小 Function_nameF1; Max_ite…