如果可能的话,我更愿意使用 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/