Qt 时间格式化输出

在 Qt 中,可以使用 QDateTimeQDate 或 QTime 类的 toString() 方法进行时间格式化输出。以下是详细说明和示例:


1. 基本格式化

使用预定义的格式字符串或自定义格式说明符:

常用格式说明符
  • 日期
    • yyyy:四位年份(如 2023)
    • MM:两位月份(01-12)
    • dd:两位日期(01-31)
    • MMM:缩写月份(如 Jan)
    • MMMM:完整月份(如 January)
  • 时间
    • HH:24小时制小时(00-23)
    • hh:12小时制小时(01-12)
    • mm:分钟(00-59)
    • ss:秒(00-59)
    • zzz:毫秒(000-999)
    • AP/A:上午/下午(AM/PM 或本地化文本)

2. 示例代码

获取当前时间并格式化

QDateTime now = QDateTime::currentDateTime();


// ISO 8601 格式(如 2023-10-05T14:30:45)
QString isoFormat = now.toString(Qt::ISODate);


// 自定义格式(如 2023-10-05 14:30:45)
QString customFormat = now.toString("yyyy-MM-dd HH:mm:ss");


// 12小时制(如 2023-10-05 02:30:45 PM)
QString twelveHourFormat = now.toString("yyyy-MM-dd hh:mm:ss AP");
仅日期或时间

QDate date = QDate::currentDate();
QTime time = QTime::currentTime();


QString dateStr = date.toString("yyyy-MM-dd"); // 如 2023-10-05
QString timeStr = time.toString("HH:mm:ss.zzz"); // 如 14:30:45.678

3. 本地化输出

使用 QLocale 结合区域设置:

QLocale locale(QLocale::Chinese); // 中文环境
QDateTime now = QDateTime::currentDateTime();


// 中文日期时间(如 2023年10月5日 下午02时30分45秒)
QString localizedStr = locale.toString(now, "yyyy'年'M'月'd'日' Ah时m分s秒");

4. 完整示例

#include <QDateTime>
#include <QDebug>

int main() {
    QDateTime now = QDateTime::currentDateTime();

    // 标准格式
    qDebug() << "ISO Date:" << now.toString(Qt::ISODate);

    // 自定义格式
    qDebug() << "Custom Format:" << now.toString("yyyy-MM-dd HH:mm:ss.zzz");

    // 12小时制 + 本地化
    qDebug() << "12-hour Format:" << now.toString("hh:mm:ss AP");

    // 中文本地化
    QLocale locale(QLocale::Chinese);
    qDebug() << "Chinese Format:" << locale.toString(now, "yyyy'年'MM'月'dd'日'");

    return 0;
}

输出示例

ISO Date: "2023-10-05T14:30:45"
Custom Format: "2023-10-05 14:30:45.678"
12-hour Format: "02:30:45 PM"
Chinese Format: "2023年10月05日"

注意事项

  1. 区域设置AP/A 的输出依赖系统区域设置(如中文系统可能显示“上午/下午”)。
  2. 转义字符:使用单引号 ' 包裹固定文本(如 yyyy'年'MM'月')。
  3. 性能:频繁格式化时,可预生成 QLocale 对象以避免重复创建开销。
### 使用 Qt 进行 World 文件的格式化输出 对于世界文件(通常指地理信息系统中的辅助文件),其内容通常是简单的文本形式,包含坐标变换参数等信息。在 Qt 中可以通过 `QTextStream` 类来进行此类文件的读写操作[^1]。 下面是一个利用 `QTextStream` 对象向 world 文件中写入特定格式化字符串的例子: ```cpp #include <QFile> #include <QTextStream> #include <QString> void writeWorldFile(const QString& filePath, double paramA, double paramB, double paramC, double paramD, double paramE, double paramF) { QFile file(filePath); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return; QTextStream out(&file); // 设置数值精度并进行格式化输出 out.setRealNumberNotation(QTextStream::FixedNotation); out.setRealNumberPrecision(8); out << paramA << "\n" << paramB << "\n" << paramC << "\n" << paramD << "\n" << paramE << "\n" << paramF; } ``` 此函数接受六个双精度浮点数作为参数,这些代表了世界文件的标准六参数模型,并将其按照固定的小数位数格式保存到指定路径下的文件中。这里使用了 `setRealNumberNotation()` 和 `setRealNumberPrecision()` 方法来自定义实数的表现方式。 另外,在某些情况下可能还需要处理时间戳或者其他特殊字段。此时可以借助于 `QDateTime::toString()` 来获取符合需求的时间表示法[^4]。 如果涉及到更复杂的字符串拼接或者模式匹配,则可考虑采用 `QString` 提供的相关方法如 `arg()` 或者正则表达式的功能来构建最终要写出的内容[^2]。 #### 注意事项 当执行上述代码前,请确认目标目录具有足够的权限允许创建新文件或覆盖已有同名文件;同时也要注意检查输入参数的有效性和合法性以防止意外错误发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值