Qt 获取当前时间

本文介绍了在Qt中获取时间日期的多种方法,包括使用QDateTime、QTime类及C语言函数localtime和Windows API函数GetLocalTime。每种方法均有详细的示例代码和输出格式说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、获取带日期的时间,使用QDateTime类
QDateTime current_date_time =QDateTime::currentDateTime();
QString current_date =current_date_time.toString("yyyy.MM.dd hh:mm:ss.zzz ddd");
current_date字符串结果为"2016.05.20 12:17:01.445 周五",其中时间的显示格式可灵活配置,此处简单说明本实例中用到的部分:
yyyy表示年;MM表示月;dd表示日; hh表示小时;mm表示分;ss表示秒;zzz表示毫秒;ddd表示周几
详细配置格式内容较多,有需要的请自行查看Qt Assistant中关于函数QString QDateTime::toString ( const QString & format ) const的说明
2、只需要时间,不需要日期,也可使用QTime类
QTime current_time =QTime::currentTime();
int hour = current_time.hour();//当前的小时
int minute = current_time.minute();//当前的分
int second = current_time.second();//当前的秒
int msec = current_time.msec();//当前的毫秒
当然QTime也可以像QDateTime::toString那样直接输出固定格式的字符串,使用方法与QDateTime::toString类似,也可参考Qt Assistant中关于函数QString QTime::toString ( const QString & format ) const的说明
3、使用标准的C语言函数localtime(精确到秒)
注意:需要包含time.h头文件
(1)使用strftime()进行格式转换
time_t t = time( 0 );
char tmp[64];
strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) );
printf("%s\n",tmp);
输出为“2016/05/20 13:11:57 Friday 本年第141天 中国标准时间”
其中函数size_t strftime(char *strDest,size_t maxsize,const char *format,const  struct tm *timeptr)功能为根据format指向字符串中格式命令把timeptr中保存的时间信息放在strDest指向的字符串中,最多向strDest中存放maxsize个字符。该函数返回向strDest指向的字符串中放置的字符数。
format说明:
%a 星期几的简写
%A 星期几的全称
%b 月份的简写
%B 月份的全称
%c 标准的日期的时间串
%C 年份的前两位数字
%d 十进制表示的每月的第几天
%D 月/天/年
%e 在两字符域中,十进制表示的每月的第几天
%F 年-月-日
%g 年份的后两位数字,使用基于周的年
%G 年份,使用基于周的年
%h 简写的月份名
%H 24小时制的小时
%I 12小时制的小时
%j 十进制表示的每年的第几天
%m 十进制表示的月份
%M 十时制表示的分钟数
%n 新行符
%p 本地的AM或PM的等价显示
%r 12小时的时间
%R 显示小时和分钟:hh:mm
%S 十进制的秒数
%t 水平制表符
%T 显示时分秒:hh:mm:ss
%u 每周的第几天,星期一为第一天 (值从1到7,星期一为1)
%U 第年的第几周,把星期日作为第一天(值从0到53)
%V 每年的第几周,使用基于周的年
%w 十进制表示的星期几(值从0到6,星期天为0)
%W 每年的第几周,把星期一做为第一天(值从0到53)
%x 标准的日期串
%X 标准的时间串
%y 不带世纪的十进制年份(值从0到99)
%Y 带世纪部分的十制年份
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。
%% 百分号
(2)使用asctime()进行格式转换
/*得到系统时间*/
time_t   cur;
struct tm          daytime;
cur = time((time_t*)NULL);
time(&cur);       
/*时间转换*/
daytime = *localtime(&cur);     
printf("%s",  asctime(&daytime));
输出为“Wed Feb 13 15:46:11 2016”
4、使用Windows API 函数GetLocalTime(精确到毫秒)
SYSTEMTIME sys;
GetLocalTime( &sys );
printf("%4d/%2d/%2d %2d:%2d:%2d.%3d\n",  
sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds); 
输出为“2016/5/16 10:13:23.234”
其中SYSTEMTIME结构体定义如下
typedef struct _SYSTEMTIME
{
WORD wYear;//年
WORD wMonth;//月
WORD wDayOfWeek;//星期,0为星期日,1为星期一,2为星期二……
WORD wDay;//日
WORD wHour;//时
WORD wMinute;//分
WORD wSecond;//秒
WORD wMilliseconds;//毫秒
}SYSTEMTIME,*PSYSTEMTIME;
以上四种方法在QT程序中均可使用!

<think>我们被要求提供在Qt获取当前时间的代码或方法。根据引用内容,主要使用QDateTime类。引用[1]展示了获取当前时间的分钟部分,引用[2]提到了获取当前系统时间时间戳,引用[3]和引用[4]则提供了获取完整日期时间并格式化的方法。目标:获取当前时间(包括时、分、秒,可能还需要毫秒)步骤:1.使用QDateTime::currentDateTime()获取当前日期和时间。2.从QDateTime对象中提取时间部分(QTime),或者直接使用toString方法格式化输出时间。有两种常用方法:方法一:获取当前日期时间,然后提取时间部分(QTime),再根据需要获取时、分、秒等。方法二:直接格式化日期时间字符串,只保留时间部分。示例代码1(提取时间部分):QDateTimecurrentDateTime=QDateTime::currentDateTime();QTimecurrentTime=currentDateTime.time();inthour=currentTime.hour();//当前小时(0-23)intminute=currentTime.minute();//当前分钟(0-59)intsecond=currentTime.second();//当前秒(0-59)intmsec=currentTime.msec();//当前毫秒(0-999)示例代码2(格式化输出时间字符串):QStringtimeStr=currentDateTime.toString("hh:mm:ss");//格式为:时:分:秒,例如"14:05:30"//如果需要包含毫秒,可以使用QStringtimeWithMSec=currentDateTime.toString("hh:mm:ss.zzz");//例如"14:05:30.456"根据引用[3]和引用[4]中的示例,我们可以写出完整的代码。注意:如果只需要字符串形式的时间,第二种方法更简洁。下面提供两个示例代码:示例一:获取当前时间(时、分、秒、毫秒)并分别存储在变量中示例二:获取当前时间的字符串表示(带格式)我们参考引用[3]中的代码,它使用了toString方法并包含了毫秒。完整示例程序(控制台应用):*/</think>### Qt 获取当前时间的方法详解 在 Qt获取当前时间主要使用 **QDateTime** 和 **QTime** 类,以下是几种常用方法及示例代码: #### 方法一:获取完整时间对象 ```cpp #include <QDateTime> #include <QDebug> // 获取当前日期时间对象 QDateTime currentDateTime = QDateTime::currentDateTime(); // 提取时间部分 QTime currentTime = currentDateTime.time(); // 获取时间组件 int hour = currentTime.hour(); // 小时 (0-23) int minute = currentTime.minute(); // 分钟 (0-59) int second = currentTime.second(); // 秒 (0-59) int msec = currentTime.msec(); // 毫秒 (0-999) qDebug() << "当前时间: " << hour << ":" << minute << ":" << second << "." << msec; ``` #### 方法二:直接获取格式化时间字符串 ```cpp #include <QDateTime> #include <QDebug> // 直接格式化为字符串 QString timeStr = QDateTime::currentDateTime().toString("HH:mm:ss"); QString timeWithMs = QDateTime::currentDateTime().toString("HH:mm:ss.zzz"); qDebug() << "标准格式: " << timeStr; // 输出 "14:05:30" qDebug() << "带毫秒格式: " << timeWithMs; // 输出 "14:05:30.456" ``` #### 方法三:仅获取时间组件(无需日期) ```cpp #include <QTime> #include <QDebug> // 直接获取当前时间 QTime now = QTime::currentTime(); qDebug() << "简化获取: " << now.toString("hh:mm ap"); // 输出 "02:05 PM" (12小时制+AM/PM) ``` #### 格式化符号说明 | 符号 | 含义 | 示例 | |------|--------------|------------| | HH | 24小时制小时 | 14 | | hh | 12小时制小时 | 02 | | mm | 分钟 | 05 | | ss | 秒 | 30 | | zzz | 毫秒 | 456 | | ap | AM/PM 指示器 | PM | | t | 时区 | CEST | #### 关键要点: 1. **核心类**: - `QDateTime`:获取日期+时间 - `QTime`:仅获取时间 - 两者都包含`current...()`静态方法[^2][^4] 2. **性能考虑**: - `QTime::currentTime()` 比 `QDateTime::currentDateTime().time()` 更高效 - 需要毫秒精度时才使用`zzz`格式符 3. **时区处理**: ```cpp // 获取带时区的时间 QString timeWithTz = QDateTime::currentDateTime().toString("HH:mm:ss t"); // 输出 "14:05:30 CEST" ``` 4. **12/24小时制切换**: ```cpp // 系统本地化设置(自动适应12/24小时制) QString localTime = QLocale().toString(QTime::currentTime(), QLocale::ShortFormat); ``` > **最佳实践**: > 对于简单时间显示推荐直接使用 `QTime::currentTime().toString("HH:mm:ss")`; > 需要毫秒精度时使用 `QDateTime::currentDateTime().toString("HH:mm:ss.zzz")`[^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值