QDateTime类提供了日期和时间功能。
QDateTime对象包含一个日历日期和一个时钟时间(一个“日期时间”)。它是QDate和QTime两个类的组合。它可以从系统时钟中读取当前日期时间。它提供比较日期时间和操作日期时间的函数,比如加上一定数量的秒、天、月或年。
QDateTime对象通常可以由明白地给定的日期和时间来创建,或者使用静态函数currentDateTime()让QDateTime对象包含系统时钟的日期时间。日期时间也可以由setDate()和setTime()来改变。日期时间也可以通过使用setTime_t()函数来得到一个POSIX标准的时间,它表示的是自从1970年1月1日00:00:00以来的秒数。fromString()函数通过一个给定的字符串和在字符串中日期时间格式的间隔说明就可以返回一个QDateTime。
date()和time()函数提供了对日期和时间的访问。toString()提供了文本格式的相同信息。
例子:
//.h文件:
//定义槽函数:
private slots:
void XTTime();
void on_pushButton_5_clicked();
void on_pushButton_6_clicked();
/*在ui界面中添加两个按键pushButton_5,pushButton_6
自动关联on_pushButton_5_clicked(),on_pushButton_6_clicked()函数;
*/
//.cpp
void MainWindow::on_pushButton_5_clicked()
{
//定义定时器 每秒触发一次
xtTimer = new QTimer(this);
connect(xtTimer,SIGNAL(timeout()),this,SLOT(XTTime()));
xtTimer->start(1000);
}
void MainWindow::XTTime()
{
QDateTime dt = QDateTime::currentDateTime();
QDateTime xmas( dt.date(), QTime(17,50,00));
//定义QDateTime(QDate(yyyy,MM,dd),QTime(hh,mm,ss));
QDateTime ymas( dt.date(), QTime(00,00,00) );
int xinNum = dt.toTime_t() - xmas.toTime_t(); //现在时间距离xmas的时间还有多少秒,由于xmas设置的时间是在未来所以返回值为负数
int yinNum = dt.toTime_t() - ymas.toTime_t(); //现在时间距离ymas的时间过去多久,由于ymas设置的时间是在过去所以返回值为正数
int i = dt.secsTo(xmas);//当前距离xmas还有多久,xmas在未来返回值为正,为秒
int j = dt.secsTo(ymas);//当前距离ymas还有多久,ymas在过去返回值为负,
qDebug()<<"Now Time = "<< dt.toString("yyyy-MM-dd hh:mm:ss");
qDebug()<<"x Time = "<< xmas.toString("yyyy-MM-dd hh:mm:ss");
qDebug()<<"y Time = "<< ymas.toString("yyyy-MM-dd hh:mm:ss");
qDebug()<<"xinNum XTTime = "<< xinNum;
qDebug()<<"yinNum XTTime = "<< yinNum;
qDebug()<<"i inNumXTTime = "<< i;
qDebug()<<"j inNumXTTime = "<< j;
qDebug()<<" ";
}
/*
与secsTo()类似的函数还有daysto()、msecsTo()函数;
调用方式是一样的,但daysto()返回值为天数,msecsTo()返回值为毫秒数
*/
void MainWindow::on_pushButton_6_clicked()
{
QDateTime dt = QDateTime::currentDateTime();
QDateTime UTC0 = QDateTime::currentDateTimeUtc();
qDebug()<<"Now Time UTC = "<< UTC0.toString("yyyy-MM-dd hh:mm:ss:zzz");
qDebug()<<"Now Time = "<< dt.toString("yyyy-MM-dd hh:mm:ss:zzz");
qDebug()<<"addDays() = "<<dt.addDays(1);
qDebug()<<"addMonths() = "<<dt.addMonths(1);
qDebug()<<"addMSecs() = "<<dt.addMSecs(100);
qDebug()<<"addSecs() = "<<dt.addSecs(30);
qDebug()<<"addYears() = "<<dt.addYears(1);
//重新配置年月日秒 毫秒的值 :正数表示增加 负数表示减少
//获取日期 获取时间
QDateTime now1 = QDateTime::currentDateTime();
qDebug()<<"date() = "<< now1.date().toString("yyyy-MM-dd");
qDebug()<<"time() = "<< now1.time().toString("hh:mm:ss");
//UTC:表示为协调世界时间 local:中国标准时间(现场相关的时间(时区和夏令时))
QDateTime UTC(QDateTime::currentDateTimeUtc());
QDateTime local(UTC.toLocalTime());
qDebug() << "UTC time is:" << UTC;
qDebug() << "Local time is:" << local;
qDebug() << "No difference between times:" << UTC.secsTo(local);
qDebug() << "UTC toOffsetFromUtc() " << UTC.toOffsetFromUtc(100);
qDebug() << "local toOffsetFromUtc() " << local.toOffsetFromUtc(60);//自动从LocalTime转化为UTC 在进行运算
qDebug() << "local toMSecsSinceEpoch() " << local.toMSecsSinceEpoch();
qDebug() << "local toTimeSpec() " << local.toTimeSpec(Qt::LocalTime);
qDebug() << "UTC setTimeSpec(Qt::TimeSpec spec): ";
//设置TimeSpec的类型
UTC.setTimeSpec(Qt::UTC);
qDebug() << "UTC time is:" << UTC;
}
/*
Qt::TimeSpec
Qt::LocalTime: 0 现场相关的时间(时区和夏令时)。
Qt::UTC : 1 协调世界时间,取代格林尼治平均时间。
Qt::OffsetFromUTC: 2 从协调世界时间秒偏移量。
Qt::TimeZone: 3 使用特定的日光节约规则集命名的时区。
Qt::TimerType
Qt::PreciseTimer 0 精确计时器尽量保持毫秒精度
Qt::CoarseTimer 1 粗定时器试图保持精度在5%的期望间隔
Qt::VeryCoarseTimer 2 非常粗的定时器只保持完整的秒精度
QTimeZone::timetype
QTimeZone::standardtime 0 时区中的标准时间,即日光节约无效时。
例如格式化显示名时会显示“太平洋标准
时间”之类的东西。
QTimeZone::daylighttime 1 日光节约有效期。例如,格式化显示名时
会显示“太平洋夏令时间”之类的东西。
QTimeZone::generictime 2 非特定时间或夏时制的时间,无论是未知
时间还是中性形式。例如格式化显示名时
会显示“太平洋时间”之类的东西。
其他函数说明:
bool QDateTime::isDaylightTime() const
如果日期落在日光节约时间。返回true
如果QT::timespec不是QT::当地时间或QT::时区然后将始终返回false。
bool QDateTime::isNull() const
如果日期和时间为NULL,则返回true,否则返回false。一个空的日期无效。
bool QDateTime::isValid() const
如果日期和时间都是有效的,他们在目前在Qt::timespec是有效的,返回true,否则返回false。
如果timespec()是Qt::LocalTime or Qt::TimeZone的日期和时间进行检查看
是否落在标准时间夏令时间的过渡时间,即如果过渡是在凌晨两点钟前进,
凌晨3点然后时间从02:00:00到02:59: 59.999被认为是无效的。
*/