当前位置: 首页 > news >正文

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.lryc.cn/news/290815.html

相关文章:

  • 美国将限制中国,使用Azure、AWS等云,训练AI大模型
  • 智能指针|巨巨巨详细
  • 硬件知识(2) 手机的传感器-sensor
  • Kotlin快速入门系列9
  • nginx+nginx-rtmp-module+ffmpeg进行局域网推流rtmp\m3u8
  • PMP备考笔记:模拟考试知识点总结
  • docker程序镜像的安装
  • openssl3.2 - .pod文件的查看方法
  • 力扣238. 除自身以外数组的乘积(前后缀和)
  • Java玩转《啊哈算法》排序之快速排序
  • 静态代理IP该如何助力Facebook多账号注册运营?
  • npm 淘宝镜像正式到期
  • 【Spring Boot 3】【@Scheduled】多线程执行定时任务
  • TypeScript 基础学习
  • 《CSS3》田字网格背景(外实线内虚线)的实现
  • 图书管理系统(ArrayList和LinkedList)--versions3.0
  • 游戏开发丨基于Pygame的AI版贪吃蛇小游戏
  • qt-C++笔记之QStringList、QList<QString>、QString、QChar、QList<QChar>区别
  • python爬虫学习之解析_BeautifulSoup
  • 2024美赛数学建模赛题解读常用模型算法
  • NoSQL 数据库管理系统和模型的比较
  • 数据库(SQL)
  • 如何用Docker+jenkins 运行 python 自动化?
  • uniapp瀑布流实现
  • 鸿蒙:@Link装饰器-父子双向同步
  • Leetcode--27
  • 使用Eclipse搞Android项目报错
  • import sys是什么
  • Python爬虫:XPath基本语法
  • UML/SysML建模工具更新情况(截至2024年1月)(1)UModel 2024