2012-02-02 21 views
1

可能な限りQtメソッドでこれを行うことをお勧めします。OSXが24時間表示されているかどうかを調べる

現在のところ、私たちのコードでは、Windowsが24時間制であることを区別できます。ただし、Macでは使用できません。

次のような文字列を返すメソッドがあります:1/9/2012 9:53:42 AM - 私は以前の時間ではなく、現在のものを私たちに与えています。しかし、この方法で混乱したい。

私は、現在のシステム時計が軍事的な時刻にあるかどうかを判断する方法を試してきました。それを反映するために文字列から返された前回の時刻を調整します。私はこれを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を返します。これは目的を完全に破ります。

アイデアは非常に高く評価されます。

答えて

0

あなたが持っている文字列( "1/9/2012 9:53:42 AM")を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); 
+0

私が持っている文字列は24時間形式には報告されていません。さもなければ私はそれを使い、それを使ってやっていきます:p。システムが24時間制であるかどうかを調べる方法を理解しようとしています。私は間違いなく私のフォーマットの目的のために念頭に置いておくつもりです! –

+0

入手した文字列の正確な形式を知っていますか?私の例では、その時間に12時間形式が使用されています。 AMがPMに変更されても、この例は引き続き機能します。取得する文字列が現在のロケールを使用してフォーマットされている場合は、ロケールのdatetime形式を使用して文字列をQDateTimeに戻すことはできません。 –

+0

いいえ - OSX上の文字列の正確な形式は分かりませんが、これは元々の質問です。確かに、PMと言ってそれを変更できるかどうか確認できますが、どのタイプのシステムクロックがオンで、* if *を変更する必要があります。しかし、ありがとう! –

関連する問題