date & time 物件的初始化
QDate dt1(2015, 4, 12);
dt1.toString(); //Sun Apr 12 2015

QDate dt2;
dt2.setDate(2015, 3, 3);
dt2.toString(); //Tue Mar 3 2015

QTime tm1(17, 30, 12, 55);
tm1.toString("hh:mm:ss.zzz"); //17:30:12.055

QTime tm2;
tm2.setHMS(13, 52, 45, 155);
tm2.toString("hh:mm:ss.zzz"); //13:52:45.155

現在的date & time (local time系統時間)
QDate cd = QDate::currentDate();
QTime ct = QTime::currentTime();

cd.toString(); //Fri Oct 30 2015
ct.toString(); //20:55:27

dates可以直接比較
QDate dt1(2015, 4, 5);
QDate dt2(2014, 4, 5);

out << dt1 < dt2; //false

是否為閏年 QDate::isLeapYear(int)
QList years({2010, 2011, 2012, 2013, 2014, 2015, 2016});

foreach (int year, years) {
if (QDate::isLeapYear(year)) {
out << year << " is a leap year" << endl;
} else {
out << year << " is not a leap year" << endl;
}
}

使用該函數需要enable C++11,需在.pro檔加入
CONFIG += c++11


date formats
QTextStream out(stdout);

QDate cd = QDate::currentDate();

cd.toString(Qt::TextDate); //Sat Oct 31 2015
cd.toString(Qt::ISODate); //2015-10-31
cd.toString(Qt::SystemLocaleShortDate); //10/31/15
cd.toString(Qt::SystemLocaleLongDate); //Saturday, October 31, 2015
cd.toString(Qt::DefaultLocaleShortDate); //10/31/15
cd.toString(Qt::DefaultLocaleLongDate); //Saturday, October 31, 2015
cd.toString(Qt::SystemLocaleDate); //10/31/15
cd.toString(Qt::LocaleDate); //10/31/15

cd.toString("yyyy-MM-dd"); //2015-10-31
cd.toString("yy/M/dd"); //15/10/31
cd.toString("d. M. yyyy"); //31. 10. 2015
cd.toString("d-MMMM-yyyy"); //31-October-2015


Time formats
QTime ct = QTime::currentTime();

ct.toString(Qt::TextDate); //15:58:26
ct.toString(Qt::ISODate); //15:58:26
ct.toString(Qt::SystemLocaleShortDate); //3:58 PM
ct.toString(Qt::SystemLocaleLongDate); //3:58:26 PM CET
ct.toString(Qt::DefaultLocaleShortDate); //3:58 PM
ct.toString(Qt::DefaultLocaleLongDate); //3:58:26 PM CET
ct.toString(Qt::SystemLocaleDate); //3:58 PM
ct.toString(Qt::LocaleDate); //3:58 PM

ct.toString("hh:mm:ss.zzz"); //16:23:43.542
ct.toString("h:m:s a"); //4:23:43 pm
ct.toString("H:m:s A"); //16:23:43 PM
ct.toString("h:m AP"); //4:23 PM

取得今天名稱
QDate cd = QDate::currentDate();
int wd = cd.dayOfWeek(); //get the day of week

QDate::shortDayName(wd); //Sat
QDate::longDayName(wd); //Saturday

取得日期天數月份
QDate dt1(2015, 9, 18);

dt1.daysInMonth(); //取得這個月有幾天 30
dt1.daysInYear(); //取得這一年有多少天 360
dt1.month();// 取得此日期月份 9


驗證日期是否有效
QDate(2015, 2, 30).isValid(); //0
QDate(2015, 5, 11).isValid(); //1



日期天數計算
QDate dt(2015, 5, 11);
QDate nd = dt.addDays(55);

dt.toString();// Mon May 11 2015
nd.toString();// Sun Jul 5 2015

QDate xmas(2017, 12, 24);
QDate::currentDate().daysTo(xmas); //158 從現在日期到指定日期,共有幾天

QDateTime class介紹
包含日曆日期(date)、時鐘時間(time),整合了QDate和QTime classes。

QDateTime cdt = QDateTime::currentDateTime();

cdt.toString(); // Sat Oct 31 17:10:50 2015
cdt.date().toString();// Sat Oct 31 2015 ~= (QDate::currentDate()).toString()
cdt.time().toString();// 17:10:50 ~= (QTime::currentTime()).toString()


UTC時間
QDateTime cdt = QDateTime::currentDateTime();

//Taipei -8hr = UTC
cdt.toUTC().toString(); // Wed Jul 19 03:27:34 2017 GMT 格林威治時間
cdt.toLocalTime().toString(); // Wed Jul 19 11:27:34 2017 當地時間


時間戳
#include // C++
...
time_t t = time(0);
t; //1500443623 現在時間戳(UTC)

QDateTime dt;
dt.setTime_t(t); //轉換成可閱讀時間(系統時間)
dt.toString(); //Wed Jul 19 13:53:43 2017

QDateTime cd = QDateTime::currentDateTime();
cd.toTime_t(); //1500443623 取得時間戳(UTC)

QDateTime utcDate = QDateTime::currentDateTimeUtc();
utcDate.toString(); // Wed Jul 19 05:53:43 2017 GMT 取得現在UTC時間(Taipei -8)
utcDate.toTime_t(); // 1500443623 轉換成時間戳



UTC和local轉換
//UTC -> local
QDateTime UTC(QDateTime::currentDateTimeUtc());
QDateTime local(UTC.toLocalTime());

UTC.toString(); // Wed Jul 19 06:15:24 2017 GMT
local.toString();// Wed Jul 19 14:15:24 2017
UTC.secsTo(local); //No difference between times:0

//local -> UTC ------
QDateTime local(QDateTime::currentDateTime());
QDateTime UTC(local.toTimeSpec(Qt::UTC));

local.toString(); // Wed Jul 19 14:15:24 2017
UTC.toString(); // Wed Jul 19 06:15:24 2017 GMT
local.secsTo(UTC); // No difference between times:0

QDateTime local(QDateTime::currentDateTime());
QDateTime UTC(local.toUTC());
local.toString(); // Wed Jul 19 14:15:24 2017
UTC.toString();// Wed Jul 19 06:15:24 2017 GMT
local.secsTo(UTC);// No difference between times:0

將local time設為UTC
QDateTime local(QDateTime::currentDateTime());
local.toString(); // Wed Jul 19 14:19:46 2017

QDateTime UTC(local);
UTC.setTimeSpec(Qt::UTC);
UTC.toString(); //"Wed Jul 19 14:19:46 2017 GMT

local.secsTo(UTC)//"here are 28800 seconds difference between the datetimes. (8hr) 與UTC相差8hr



參考