如果可能的话,我宁愿用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 - 这完全违背了目的。
非常感谢任何想法!
答案 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);