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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为——NGFW Module安装在集群交换机上,二层双机负载分担部署,交换机重定向引流

NGFW Module安装在集群交换机上&#xff0c;二层双机负载分担部署&#xff0c;交换机重定向引流 业务需求 如图1所示&#xff0c;两台交换机集群组网&#xff0c;两块NGFW Module分别安装在两台交换机的1号槽位组成双机负载分担组网。NGFW Module工作在二层&#xff0c;也就是…

FileViewer纯前端预览项目Vue2 demo

FileViewer 项目Vue2 demo 本demo基于vue-clijsvue2.x构建&#xff0c;如果您需要vue3版本的demo&#xff0c;请前往main分支。 适用于Vue2 Webpack&#xff0c;本集成方法要求最低Webpack版本为5&#xff0c;也就是Vue Cli Service 5.0.0以上&#xff0c;当然&#xff0c;if…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-4 Document

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>Document</title> </head><body> <canvas id"cavsElem" width"400" height"600">您的浏览器不支持Canvas…

flutter module打包成framework引入原生工程

Flutter - 将 Flutter 集成到现有项目&#xff08;iOS - Framework篇&#xff09; 本篇文章大幅参考了 caijinglong 大佬的总结文章&#xff1a; 把flutter作为framework添加到已存在的iOS中[1] 用 Flutter 来开发&#xff0c;从来都不可能是新开的一个纯 Flutter 项目&#xf…

【LVGL源码移植环境搭建】

LVGL源码移植&环境搭建 ■ LVGL源码移植■ 下载LVGL源码■ 修改LVGL文件夹■■■■ 视频链接 Ubuntu模拟器环境建置 ■ LVGL源码移植 ■ 下载LVGL源码 LVGL源码 我们以选择v8.2.0为例&#xff0c;选择8.2.0下载 ■ 修改LVGL文件夹 1.我们只需要关注这5个文件即可&…

java常量和kotlin常量

在java中使用final声明常量在kotlin中使用const val声明常量 常量在编译为字节码后会直接把调用常量的地方直接替换为常量值&#xff0c;示例如下&#xff1a; public class ConstDemo {public static final String NAME "Even";private static final int ID 100…

PythonSSTI漏洞

一&#xff0c;python内置PYC反编译&#xff1a; pyc文件&#xff0c;就是python的代码生成的字节码文件&#xff0c;有些类似于Java中的.class文件&#xff0c;pyc文件可以经过本地python解释器进行运行&#xff0c;从而实现跨平台。 也就是说我们得到了.pyc文件&#xff0c;就…

Selenium 隐藏浏览器指纹特征的几种方式

我们使用 Selenium 对网页进行爬虫时&#xff0c;如果不做任何处理直接进行爬取&#xff0c;会导致很多特征是暴露的 对一些做了反爬的网站&#xff0c;做了特征检测&#xff0c;用来阻止一些恶意爬虫 本篇文章将介绍几种常用的隐藏浏览器指纹特征的方式 1. 直接爬取 目标对…

vector的相关概念及常用接口

vector的基本概念 功能&#xff1a; vector容器与数组非常类似&#xff0c;也称单端数组&#xff08;动态数组&#xff09; vector容器的内部结构图示&#xff1a; vector与普通数组之间的区别&#xff1a; vector可以动态扩展&#xff0c;而普通数组是静态空间&#xff0c…

STM32——ADC

STM32——ADC 1.ADC介绍 ADC是什么&#xff1f; 全称&#xff1a;Analog-to-Digital Converter&#xff0c;指模拟/数字转换器! ADC性能指标 量程&#xff1a;能测量的电压范围分辨率&#xff1a;ADC能辨别的最小模拟量&#xff0c;通常以输出二进制数的位数表示&#xf…

openGauss学习笔记-211 openGauss 数据库运维-高危操作一览表

文章目录 openGauss学习笔记-211 openGauss 数据库运维-高危操作一览表211.1 禁止操作211.2 高危操作 openGauss学习笔记-211 openGauss 数据库运维-高危操作一览表 各项操作请严格遵守指导书操作&#xff0c;同时避免执行如下高危操作。 211.1 禁止操作 表1中描述在产品的操…

python二维高斯热力图绘制简单的思路代码

import numpy as np import matplotlib.pyplot as plt from scipy.ndimage import gaussian_filter import cv2# 生成一个示例图像 image_size 100 image np.zeros((image_size, image_size))# 在图像中心创建一个高亮区域 center_x, center_y image_size // 2, image_size …

visual studio2022专业版安装步骤

目录 一、Visual studio下载二、创建C#项目——Hello World三、专业版秘钥激活 一、Visual studio下载 首先进入下载官网 先下载2022专业版&#xff0c;等等后面还需要选环境 我勾选了以下几个和c#开发有关的&#xff0c;后面缺什么还可以再安装所有以少勾了问题也不大 然后…

互联网加竞赛 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸表情识别 该项目较…

解密数据清洗,SQL中的数据分析

大家好&#xff0c;数据库表中的数据经常会很杂乱。数据可能包含缺失值、重复记录、异常值、不一致的数据输入等&#xff0c;在使用SQL进行分析之前清洗数据是非常重要的。 当学习SQL时&#xff0c;可以随意地创建数据库表&#xff0c;更改它们&#xff0c;根据需要更新和删除…

《游戏-03_2D-开发》

基于《游戏-02_2D-开发》&#xff0c; 继续制作游戏&#xff1a; 首先要做的时切割人物Idle空闲状态下的动画&#xff0c; 在切割之前我们需要创建一个文件夹&#xff0c;用来存放动画控制器AnimatorContoller&#xff0c; 再创建一个人物控制器文件夹用来存放人物控制器&…

uniapp H5 touchstart touchend 切换背景会失效,或者没用

uniapp H5 touchstart touchend 切换背景会失效&#xff0c;或者没用 直接上代码 &#xff08;使用 class 以及 hover-class来设置样式&#xff09; class 设置默认的背景图或者样式 hover-class 来设置按下的背景图 或者样式 抬起 按下 <view class"mp_zoom_siz…

重写Sylar基于协程的服务器(1、日志模块的架构)

重写Sylar基于协程的服务器&#xff08;1、日志模块的架构&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器&#xff08;1、日志模…

力扣hot100 组合总和 回溯 剪枝 组合

Problem: 39. 组合总和 文章目录 思路复杂度&#x1f496; Code 思路 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) &#x1f496; Code class Solution{List<List<Integer>> res new ArrayList<>();int x;// 全局targetin…

18.通过telepresence调试部署在Kubernetes上的微服务

Telepresence简介 在微服务架构中,本地开发和调试往往是一项具有挑战性的任务。Telepresence 是一种强大的工具,使得开发者本地机器上开发微服务时能够与运行在 Kubernetes 集群中的其他服务无缝交互。本文将深入探讨 Telepresence 的架构、运行原理,并通过实际的案例演示其…