2

C# と Delphi で、ローカライズされた 24 時間を超える期間を正しく表示する方法を探しています。つまり、DateTime 型にはこのような文字列関数が用意されていることがよくありますが、タイム スパンには用意されていないのはなぜですか?

また、ローカライズされていない期間の正しい形式が何であるかさえわかりません。たとえば、2 日 10 時間 30 分の期間です。2.10:30:00 または 2:10:30:00 または 2 10:30:00 のような時間範囲を表示するものがあることがわかりました。

助けてください、ありがとう。

4

2 に答える 2

2

不変の文化(ローカライズされていない)の場合:

myDateTime.ToString(CultureInfo.InvariantCulture)

それ以外の場合は、myDateTime.ToShortDateString()または.ToLongDateString()..を使用します。

System.Threading.Thread.CurrentThread.CurrentUICultureその場合..

または、特定のことを念頭に置いている場合は、

var myCulture = CultureInfo.GetCultureInfo("en-GB");
dt.ToString(myCulture);

TimeSpansの編集:

例:

DateTime dt1 = new DateTime(2012, 7, 17, 12, 30, 0);
            DateTime dt2 = new DateTime(2012, 7, 18, 14, 40, 0);

            TimeSpan ts = dt2 - dt1;
            string s = ts.ToString("G", CultureInfo.InvariantCulture);

その他の例:http://msdn.microsoft.com/en-us/library/dd784379.aspx

編集2:

TimeSpan形式の文字列の詳細:http: //msdn.microsoft.com/en-us/library/ee372286.aspx

于 2012-07-18T03:45:50.690 に答える
2

ISO 8601に従うことができます。仕様のPDFは、ここにあります。セクションを参照してください4.4.3 Duration

ただし、このドキュメントに記載されている規則を使用することは、私にはかなり複雑に見えます。この仕様によれば、時間間隔がいつ発生するかについてのコンテキストを含める必要があるためです。

暦年、暦月、暦週、または暦日の期間は、暦におけるその位置によって異なります。したがって、名目期間の正確な期間は、使用される暦年、暦月、暦週、または暦日がわかっている場合にのみ評価できます。

期間が発生する実際の瞬間がアプリケーションに関係しない場合は、年と月の部分を忘れて、形式に固執するだけで十分かもしれませんnnDTnnHnnMnnS。これは、標準的な方法を使用して達成するのはそれほど難しいことではありませんTimeSpan

更新:もう少し読んで、この標準は結局あなたの問題に適用できないようです:

期間は、時間間隔および繰り返し時間間隔の表現のコンポーネントとして使用されます。期間自体の表現は、この国際規格では容易になりません。

私のように他の誰かがこの行き止まりに足を踏み入れるのを避けるために、ここに答えを残しておきます。または、「標準に従うようなもの」で十分だと思う場合は...

于 2012-07-18T03:45:54.220 に答える