当前位置:嗨网首页>书籍在线阅读

11-日期时间数据与字符串之间的转换

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.4.2 日期时间数据与字符串之间的转换

1.时间、日期编辑器属性设置

在图4-5窗体左上方的“日期时间”Groupbox中,使用QTimeEdit、QDateEdit、QDateTimeEdit组件作为时间、日期、日期时间编辑器;在其右侧,各放置一个QLineEdit组件用于字符串显示。

QDateEdit和QTimeEdit都从QDateTimeEdit继承而来,实现针对日期或时间的特定显示功能。实际上,QDateEdit和QTimeEdit的显示功能都可以通过QDateTimeEdit实现,只需设置好属性即可。

QDateTimeEdit类的主要属性的介绍如下。

  • datetime:日期时间。
  • date:日期,设置datetime时会自动改变date,同样,设置date时,也会自动改变datetime里的日期。
  • time:时间,设置datetime时会自动改变time,同样,设置time时,也会自动改变datetime里的时间。
  • maximumDateTime、minimumDateTime: 最大、最小日期时间。
  • maximumDate、minimumDate: 最大、最小日期。
  • maximumTime、minimumTime: 最大、最小时间。
  • currentSection:当前输入光标所在的时间日期数据段,是枚举类型QDateTimeEdit::Section。QDateTimeEdit显示日期时间数据时分为多个段,单击编辑框右侧的上下按钮可修改当前段的值。如输入光标在YearSection段,就修改“年”的值。
  • currentSectionIndex:用序号表示的输入光标所在的段。
  • calendarPopup:是否允许弹出一个日历选择框。当取值为true时,右侧的输入按钮变成与QComboBox类似的下拉按钮,单击按钮时出现一个日历选择框,用于在日历上选择日期。对于QTimeEdit,此属性无效。
  • displayFormat:显示格式,日期时间数据的显示格式,例如设置为“yyyy-MM-dd HH:mm:ss”,一个日期时间数据就显示为“2016-11-02 08:23:46”。

2.日期时间数据的获取与转换为字符串

“读取当前日期时间”按钮的clicked()信号的槽函数代码如下:

void Dialog::on_btnGetTime_clicked()
{ //获取当前日期时间,为三个专用编辑器设置日期时间数据,并转换为字符串
   QDateTime  curDateTime=QDateTime::currentDateTime();
   ui->timeEdit->setTime(curDateTime.time());
   ui->editTime->setText(curDateTime.toString("hh:mm:ss")); 
   ui->dateEdit->setDate(curDateTime.date());
   ui->editDate->setText(curDateTime.toString("yyyy-MM-dd")); 
   ui->dateTimeEdit->setDateTime(curDateTime);
   ui->editDateTime->setText(curDateTime.toString("yyyy-MM-dd hh:mm:ss"));
}

首先用QDateTime类的静态函数currentDateTime()获取当前日期时间,并赋值给变量curDate Time。

然后用curDateTime变量设置界面上3个日期、时间编辑器的时间或日期值,利用了QDateTime的time()和date()分别提取时间和日期。

将curDateTime表示的日期时间数据转换为字符串,然后在LineEdit编辑框上显示。时间日期转换为字符串使用了QDateTime的toString()函数,分别用不同的格式显示时间、日期、日期时间。

ui->editTime->setText(curDateTime.toString("hh:mm:ss")); 
ui->editDate->setText(curDateTime.toString("yyyy-MM-dd")); 
ui->editDateTime->setText(curDateTime.toString("yyyy-MM-dd hh:mm:ss"));

QDateTime::toString()函数的函数原型是:

QString QDateTime::toString(const QString &format) const

它将日期时间数据按照format指定的格式转换为字符串。format是一个字符串,包含一些特定的字符,表示日期或时间的各个部分,表4-2是用于日期时间显示的常用格式符。

表4-2 用于日期显示的格式符及其意义

| 字符 | 意义 | | :----- | :----- | :----- | :----- | | d | 天,不补零显示,1-31 | | dd | 天,补零显示,01-31 | | M | 月,不补零显示,1-12 | | MM | 月,补零显示,01-12 | | yy | 年,两位显示,00-99 | | yyyy | 年,4位数字显示,如2016 | | h | 小时,不补零,0-23或1-12(如果显示AM/PM) | | hh | 小时,补零2位显示,00-23或01-12(如果显示AM/PM) | | H | 小时,不补零,0-23(即使显示AM/PM) | | HH | 小时,补零显示,00-23(即使显示AM/PM) | | m | 分钟,不补零,0-59 | | mm | 分钟,补零显示,00-59 | | z | 毫秒,不补零,0-999 | | zzz | 毫秒,补零3位显示,000-999 | | AP或A | 使用AM/pm显示 | | ap或a | 使用am/pm显示 |

在设置日期时间显示字符串格式时,还可以使用填字符,甚至使用汉字。例如,日期显示格式可以设置为:

curDateTime.toString("yyyy年MM月dd日");

这样得到的字符串是“2016年11月21日”。

3.字符串转换为日期时间

同样的,也可以将字符串转换为QTime、QDate或QDateTime类型,使用静态函数QDateTime:: fromString(),其函数原型为:

QDateTime QDateTime::fromString(const QString &string, const QString &format)

其中,第1个参数string是日期时间字符串,第2个参数format是字符串表示的格式,按照表4-2的格式字符定义。

在程序运行时,手工修改“日期时间”后面文本框里的日期时间字符串,单击“设置日期时间”按钮,可以将文本框里的字符串转换为QDateTime变量,并设置为左侧DateTimeEdit组件的日期时间数据,代码如下:

void Dialog::on_btnSetDateTime_clicked()
{//字符串转换为 QDateTime
   QString str=ui->editDateTime->text();
   str=str.trimmed();
   if (!str.isEmpty())
   {
      QDateTime datetime=QDateTime::fromString(str,"yyyy-MM-dd hh:mm:ss"); 
      ui->dateTimeEdit->setDateTime(datetime); 
   }
}

静态函数QDateTime::fromString()将一个字符串按照格式转换为日期时间类型。程序中的代码是:

datetime=QDateTime::fromString(str,"yyyy-MM-dd hh:mm:ss");

这里将字符串str按照格式"yyyy-MM-dd hh:mm:ss"转换为日期时间变量,格式是指字符串str所表示的日期时间的格式。