- 根据时区获取时间
cpp
#include <QCoreApplication>
#include <QDateTime>
#include <QTimeZone>
#include <QDebug>
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
QTimeZone timeZone("Europe/Paris");
QDateTime dateTime = QDateTime::currentDateTime().toTimeZone(timeZone);
qDebug() << "Current time in Paris:" << dateTime.toString();
return app.exec();
}
- 将时间转为时间戳,设置硬件时间
cpp
#include <QDateTime>
#include <QDebug>
int main() {
// 创建一个 QDateTime 对象,设定一个特定的日期和时间
QDateTime dateTime(QDate(2024, 4, 18), QTime(12, 30, 0)); // 2024年4月18日 12:30:00
// 转换为时间戳(秒)
qint64 timestamp = dateTime.toSecsSinceEpoch();
qDebug() << "Unix timestamp in seconds:" << timestamp;
return 0;
}
- 将时间戳转为正常时间
并设置硬件时间
cpp
#include <QCoreApplication>
#include <QDBusConnection>
#include <QDBusMessage>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
// 连接到系统的session bus
QDBusConnection bus = QDBusConnection::systemBus();
if (!bus.isConnected()) {
qWarning() << "Failed to connect to system bus.";
return 1;
}
// 设置要调用的接口和方法
QString service = "org.freedesktop.timedate1";
QString path = "/org/freedesktop/timedate1";
QString iface = "org.freedesktop.timedate1";
QString method = "SetTime";
// 获取当前系统时间作为参数
QDateTime currentDateTime = QDateTime::currentDateTime();
qlonglong timestamp = currentDateTime.toSecsSinceEpoch() * 1000000; // 转换为微秒
// 构造DBus消息
QDBusMessage message = QDBusMessage::createMethodCall(service, path, iface, method);
message << timestamp << true; // 参数为时间戳和是否UTC时间
// 调用DBus接口
QDBusMessage reply = bus.call(message);
if (reply.type() == QDBusMessage::ReplyMessage) {
qDebug() << "Hardware time set successfully.";
} else {
qWarning() << "Failed to set hardware time:" << reply.errorMessage();
}
return app.exec();
}