检查OSX是否在24小时制

时间:2012-02-02 20:42:44

标签: c++ macos qt

如果可能的话,我宁愿用Qt方法做到这一点。

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

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

我一直在玩弄一种确定当前系统时钟是否处于军事时间的方法;并调整从字符串返回的前一个时间来反映。我可以在Windows上使用它,但在Mac上 - 它显示正常的12小时时间,无论我们是否使用24小时制。

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

        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 - capital表示它是24小时制。 我通过分隔符对不同的字符串进行标记,然后检查时间是否大于12和PM;然后添加额外的时间并组合新的时间字符串。

你可以看到我做了:

m_editModified->setText(qlTF);

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

非常感谢任何想法!

1 个答案:

答案 0 :(得分:0)

为什么不直接将您拥有的字符串(&#34; 1/9/2012 9:53:42 AM&#34;)转换为QDateTime,然后将该QDateTime转换为您格式的字符串想要(我在示例中使用ISODate):

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);