Qt 基础之QDataTime

Qt 基础之QDataTime

  • 引言
  • 一、获取(设定)日期和时间
  • 二、时间戳
  • 三、时间计算 (重载运算符)

引言

QDataTime是Qt框架中用于处理日期和时间的类。它提供了操作和格式化日期、时间和日期时间组合的功能。QDataTime可以用于存储和检索日期和时间、比较日期和时间、对日期和时间执行算术操作以及将日期和时间转换为不同的格式。(注:QDateTime不包括闰秒。)

一、获取(设定)日期和时间

    1. 获取当前日期和时间:
      在这里插入图片描述
#include "mainwindow.h"
#include <QApplication>
#include <QDateTime>int main(int argc, char *argv[])
{QApplication a(argc, argv);QDateTime currentDateAndTime = QDateTime::currentDateTime(); // 获取当前日期和时间qDebug("Current date and time: %s", currentDateAndTime.toString().toUtf8().constData());return a.exec();
}
    1. 修改时间格式:currentDateAndTime.toString("yyyy.MM.dd hh:mm:ss")
      在这里插入图片描述

更多格式可参考Qt Creator中的帮助:QString QDateTime::toString(QStringView format) const
在这里插入图片描述

    1. 获取UTC时间:QDateTime::currentDateTimeUtc();
      UTC与本地时间的转换:toUTC() - toLocalTime()
      在这里插入图片描述
    QDateTime Data(QDate(2024, 1, 2), QTime(8, 30, 0));Data = Data.toUTC();qDebug() << Data;Data = Data.toLocalTime();qDebug() << Data;
    1. 使用其构造函数或set函数设定时间:QDateTime Data(QDate(2024, 1, 2), QTime(8, 30, 0));
      在这里插入图片描述
    QDateTime Data(QDate(2024, 1, 2), QTime(8, 30, 0));qDebug() << Data;Data.setDate(QDate(2024, 1, 1));qDebug() << Data;

二、时间戳

使用时间戳的优势:

  1. 统一性:时间戳是一个数字,在不同的平台和系统中都可以统一表示时间。而时间的表示方式在不同的地区和文化中可能有所不同,例如日期顺序、时间格式等。
  2. 精确度:时间戳通常以毫秒为单位,可以提供更高的精确度。而时间的表示可能只能精确到秒或分钟级别。
  3. 方便计算:使用时间戳进行时间计算更加方便。可以直接进行加减运算,获取时间差,而不需要考虑不同的时间单位和格式化问题。
  4. 时区处理:时间戳通常是以UTC(协调世界时)表示,可以消除时区的影响。在不同的时区使用时间表示时,可能需要进行时区转换,而时间戳则可以直接用于全球范围内的时间计算。
    1. 获取时间戳
      QDateTime::currentMSecsSinceEpoch() - 返回自1970-01-01T00:00:00以来的毫秒数。
      QDateTime::currentSecsSinceEpoch() - 返回自时间1970-01-01T00:00:00以来的秒数。

几种获取系统时间戳方式的对比:https://www.jianshu.com/p/c9b775d831fb

    1. 时间戳和时间的转换 (例子如下所示):
      QDateTime::fromMSecsSinceEpoch - toMSecsSinceEpoch()
      QDateTime::fromSecsSinceEpoch - toSecsSinceEpoch()
      在这里插入图片描述
#include "mainwindow.h"
#include <QApplication>
#include <QDateTime>
#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);QDateTime currentDateAndTime = QDateTime::currentDateTime(); // 获取当前日期和时间qDebug()<<currentDateAndTime.toSecsSinceEpoch();qDebug()<<QDateTime::fromSecsSinceEpoch(currentDateAndTime.toSecsSinceEpoch());return a.exec();
}

三、时间计算 (重载运算符)

    1. QDateTime::daysTo(const QDateTime &other) const - 返回从该日期时间到另一日期时间的天数。天数是指从这个日期时间到另一个日期时间之间达到午夜的次数。这意味着从23:55到第二天0:05的10分钟差算作一天。如果其他日期时间早于此日期时间,则返回的值为负数,例子如下:
      在这里插入图片描述
	QDateTime startDate(QDate(2012, 7, 6), QTime(8, 30, 0));QDateTime endDate(QDate(2012, 7, 7), QTime(16, 30, 0));qDebug() << "Days from startDate to endDate: " << startDate.daysTo(endDate);startDate = QDateTime(QDate(2012, 7, 6), QTime(23, 55, 0));endDate = QDateTime(QDate(2012, 7, 7), QTime(0, 5, 0));qDebug() << "Days from startDate to endDate: " << startDate.daysTo(endDate);qSwap(startDate, endDate); // Make endDate before startDate.qDebug() << "Days from startDate to endDate: " << startDate.daysTo(endDate);
    1. QDateTime::addDays(qint64 ndays) const - 返回一个QDateTime对象,该对象包含的日期时间比该对象的日期时间晚ndays天(如果ndays为负数,则早于ndays天)。(还有 addMonths(), addYears(), addSecs()等)
      在这里插入图片描述
	QDateTime Data(QDate(2024, 1, 2), QTime(8, 30, 0));qDebug() << Data.addYears(1);qDebug() << Data.addMonths(1);qDebug() << Data.addDays(1);qDebug() << Data.addSecs(1);
    1. QDateTime::operator!= - 如果此日期时间与其他日期时间不同,则返回true;否则返回false。(还有<,==等可以比较两个时间的大小)
      在这里插入图片描述
    QDateTime D1(QDate(2024, 1, 2), QTime(8, 30, 0));QDateTime D2(QDate(2024, 1, 1), QTime(16, 30, 0));qDebug() << "D1 大于 D2:" << (D1 < D2);
    1. 用的比较少的输入输出流 (大多时候用时间戳)
      QDataStream &operator<<(QDataStream &out, const QDateTime &dateTime)
      QDataStream &operator>>(QDataStream &in, QDateTime &dateTime)

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

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

相关文章

linux kernel 内存踩踏之KASAN(一)

一、背景 linux 内核出现内存类问题时&#xff0c;我们常用的调试工具就是kasan&#xff0c;kasan有三种模式&#xff1a; 1. Generic KASAN &#xff08;这个就是我们最常用的&#xff0c;1 debug byte indicate 8 bytes use state, 对标用户层 asan&#xff09; 2. Softwa…

Java强训day13(选择题编程题)

选择题 编程题 题目1 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String s sc.nextLine();char[] c s.toCharArray();int i 0;int t 0;while (i < c.length) {if (c[i] ! \") {…

音视频数字化(数字与模拟-音频广播)

在互联网飞速发展的今天,每晚能坐在电视机前面的人越来越少,但是每天收听广播仍旧是很多人的习惯。 从1906年美国费森登在实验室首次进行无线电广播算起,“广播”系统已经陪伴人们115年了。1916年,收音机开始上市,收音机核心是“矿石”。1920年开始“调幅”广播,1941年开…

1.理解AOP,使用AOP

目录 1AOP基础 1.1 AOP概述 1.2AOP快速使用 2.3 AOP核心概念 1AOP基础 首先介绍一下什么是AOP&#xff0c;再通过一个快速入门程序&#xff0c;让大家快速体验AOP程序的开发。最后再介绍AOP当中所涉及到的一些核心的概念。 1.1 AOP概述 什么是AOP&#xff1f; 说白了&am…

晶体塑性有限元 Abaqus 三维泰森多边形(voronoi模型)插件 V8.0

更多内容见公众号“320科技工作室”&#xff0c;有需要欢迎通过公众号联系我们。

除毛可以用宠物空气净化器吗?猫用空气净化器哪些品牌吸毛好?

作为一位长期养猫的铲屎官&#xff0c;我深刻理解只有养猫人才懂的困扰&#xff0c;那就是家里到处都是猫毛和异味。我发现自从开始养猫之后&#xff0c;家里的空气质量变得不佳。猫毛和皮屑飞扬&#xff0c;而且室内空气中的污染物也越来越多。这种低质量的空气对我们的健康有…

刚刚,ChatGPT再爆安全漏洞!大量私密对话被泄露

ChatGPT 又一次陷入了安全漏洞风波。 国外一位用户在使用ChatGPT时表示&#xff0c;他原本只是进行一个无关的查询&#xff0c;却意外发现在和ChatGPT的聊天记录中出现了不属于自己的对话内容。 对话泄露了很多非用户本人的信息&#xff0c;其中包含了大量敏感内容。 如下图…

GPT教我如何成为rapper

提示词基本三要素:任务、角色、细节。其中任务是核心,角色和细节是可选项。 角色和细节可以引导ChatGPT更加准确地输出预期结果。 只有这三者结合才能让ChatGPT发挥出强大的语言模型能力。 任务 这个比较好理解,比如热爱唱跳rap的我,想给ChatGPT下达一个任务:如何才能…

C++ 中关键字delete用法

文章目录 代码如下&#xff1a; #include <stdio.h> #include <iostream> using namespace std;class Student { public:Student(){};Student(const Student&) delete; //禁用拷贝构造函数 也就是在拷贝构造函数声明的右侧加上delete }; int main(int argc, c…

语言革命:NLP与GPT-3.5如何改变我们的世界

文章目录 &#x1f4d1;前言一、技术进步与应用场景1.1 技术进步1.2 应用场景 二、挑战与前景三、伦理和社会影响四、实践经验五、总结与展望 &#x1f4d1;前言 自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是人工智能领域的一个重要分支…

基于Atmel Studio环境下开发AVR点灯示例

基于Atmel Studio环境下开发AVR点灯示例 &#x1f4cd;相关篇《ATMega328PB-AU烧录bootloader探索研究》 &#x1f531;《Atmel Studio开发环境下配合AVRDUDESS配置烧录快捷方式》 ✨谈起Atmel Studio开发环境&#xff0c;如果不是使用AVR单片机的人来说&#xff0c;可能比较…

SDN 拓扑感知技术带你逃离灾难,轻松实现云灾备

在这个数字化时代&#xff0c;云计算已经成为企业和组织提供各种软件应用服务和海量数据处理的普遍选择。但是&#xff0c;云计算环境下的数据量庞大且分布广泛&#xff0c;系统故障、网络攻击等风险可能会对业务应用和数据造成影响&#xff0c;导致服务中断、数据丢失等问题&a…

【学网攻】 第(17)节 -- 命名ACL访问控制列表

系列文章目录 目录 前言 一、ACL(访问控制列表)是什么&#xff1f; 二、实验 1.引入 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan【学网攻】 第…

Linux--redhat9创建软件仓库

1.插入光盘&#xff0c;挂载镜像 模拟插入光盘: 点击:虚拟机-可移动设备-CD/DVD 设备状态全选&#xff0c;使用ISO影响文件选择当前版本镜像&#xff0c;点击确认。 2.输入: df -h 可以显示&#xff0c;默认/dev/sr0文件为光盘文件&#xff0c;挂载点为/run/media/root/镜像…

GoLang和GoLand的安装和配置

1. GoLang 1.1 特点介绍 Go 语言保证了既能达到静态编译语言的安全和性能&#xff0c;又达到了动态语言开发维护的高效率&#xff0c;使用一个表达式来形容 Go 语言&#xff1a;Go C Python , 说明 Go 语言既有 C 静态语言程序的运行速度&#xff0c;又能达到 Python 动态语…

Flutter canvas 画一条波浪线 进度条

之前用 Flutter Canvas 画过一个三角三角形&#xff0c;html 的 Canvas 也画过一次类似的&#xff0c; 今天用 Flutter Canvas 试了下 感觉差不多&#xff1a; html 版本 大致效果如下&#xff1a; 思路和 html 实现的类似&#xff1a; 也就是找出点的位置&#xff0c;使用二阶…

OCP NVME SSD规范解读-8.SMART日志要求-4

SMART-21&#xff1a;这段描述解释了一个与设备内部I/O操作非对齐相关的计数器功能。该计数器记录的是由NVMe SSD执行的、起始地址未按照设备内部间接寻址单元&#xff08;IU&#xff0c;Indirection Unit&#xff09;大小进行对齐的写入I/O操作数量。 “Alignment”指的是每次…

15EG使用vivado2023.1建立hello world工程

1:打开软件建立工程 2:使用vivado创建设计模块并生成bit文件 3:导出硬件平台&#xff0c;使用vitis建立工程 4:使用vitis创建应用程序项目 5:硬件设置与调试 1:打开软件建立工程 打开VIVADO2023.1 创建一个新的工程 输入项目名称和地址&#xff0c;下面那个选项为是否…

深度学习-自注意力机制

文字编码 one-hot编码&#xff0c;让模型自己去学习怎么进行编码 常见的输出 1.每个词都有一个输出值 2.每个句子输出一个值&#xff0c;情感分类 3.输入与输出长度不对应&#xff0c;翻译任务&#xff0c;生成任务。 RNN最早的语言处理 RNN解决的是模型去考虑前面的输入…

TS项目实战一:流淌的字符动画界面

使用ts实现虚拟世界&#xff0c;创建ts项目&#xff0c;并编写ts代码&#xff0c;使用tsc编译后直接加载到html界面&#xff0c;实现类似黑客帝国中的流淌的代码界面的效果。 源码下载地址&#xff1a;点击下载 讲解视频 TS实战项目一&#xff1a;数字流界面项目创建 TS实战项…