c++ - 检查 OSX 是否采用 24 小时制

标签 c++ macos qt

如果可能的话,我更愿意使用 Qt 方法来做到这一点。

目前在我们的代码中,我们可以区分 Windows 是 24 小时时钟;但不是在 Mac 上。

我们有一个返回字符串的方法,例如:1/9/2012 9:53:42 AM - 这给了我们之前的时间,而不是当前时间(这正是我们想要的),我不想要不过要弄乱这个方法。

我一直在尝试确定当前系统时钟是否为军用时间的方法;并调整从字符串返回的先前时间以反射(reflect)这一点。我可以让它在 Windows 上运行,但在 Mac 上 - 无论我们是否使用 24 小时制,它都会显示正常的 12 小时制。

忽略我的粗略调试消息,或者如果我没有特别正确地解决问题 - 我还无法测试它并根据需要进行调整:(代码后的解释)

        QLocale *ql = new QLocale();
        QString qlTF = ql->timeFormat();
        QString fileTime = QString::fromUtf8(str.GetSafeStringPtr());
        if (qlTF.left(1) == (QString("H"))) // Our system clock is set to military time
        {
           QString newTime;
           QStringList fileTimeDateSplit = fileTime.split(" ");
           QStringList fileTimeSplit = fileTimeDateSplit.at(1).split(":");
           m_editModified->setText(qlTF);
           if (fileTimeSplit.at(0).toInt() < 12 && (fileTimeDateSplit.at(2) == "PM")) 
           {
              int newHour = 12 + (fileTimeSplit.at(0).toInt()%12);
              newTime.append(QString::number(newHour));
              newTime.append(":");
              newTime.append(fileTimeSplit.at(1));
              newTime.append(":");
              newTime.append(fileTimeSplit.at(2));
              m_editModified->setText(QString("military after noon"));
           }
        }
        else m_editModified->setText(qlTF);

基本上我是在抓取当前机器的语言环境来检索系统的时间格式。 fileTime 设置为一个字符串,例如“1/9/2012 9:53:42 AM”。 qlTF 返回一种格式,例如:HH:mm:ss、H:mm:ss、hh:mm:ss 或 h:mm:ss - 大写表示它是 24 小时制。 我用分隔符标记不同的字符串,然后检查时间是否大于 12 和 PM;然后添加额外的时间并组合新的时间字符串。

你可以看到我做到了:

m_editModified->setText(qlTF);

用于调试目的。在 Windows 上,这将设置为 HH:mm:ss;然而,即使在 Mac 上启用了 24 小时制,它仍然返回 h:mm:ss - 这完全违背了目的。

任何想法将不胜感激!

最佳答案

为什么不直接将字符串 ("1/9/2012 9:53:42 AM") 转换为 QDateTime,然后将 QDateTime 转换回所需格式的字符串(我在示例):

QString timeFormat = "M/d/yyyy h:m:s AP";
QDateTime dt = QDateTime::fromString("1/9/2012 9:53:42 AM", timeFormat);

QString text = "";
if (dt.isValid())
    text = dt.toString(Qt::ISODate);

关于c++ - 检查 OSX 是否采用 24 小时制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9119700/

相关文章:

c++ - 调用 QTcpServer 时程序崩溃

c++ - 通过覆盖类型转换动态调用函数

c++ - 在不锁定互斥锁的情况下调用 pthread_cond_signal

macos - 在没有 Xcode 的情况下提交到 OSX 应用商店

qt - QML 旋转图像

c++ - Qt Creator 5 - 没有设置调试器

c++ - 优化 std::visit 可能吗?

c++ - 如何用 cout 打印函数指针?

macos - 核心数据软管本身

bash - 在 Bash 中通配重音文件