9

以下に示すように、特定の形式で出力する必要があるタイムスパンがあります:-

TimeSpan TimeDifference = DateTime.Now - RandomDate;

TimeSpan を次のようにフォーマットしています:-

string result = string.Format(@"{0:hh\:mm\:ss}", TimeDifference);

結果は次のようになります:-

「00:16:45.6184635」

これらの秒を小数点以下 0 桁に丸めるにはどうすればよいですか?

Expected Result = 00:16:46

ありがとう

4

3 に答える 3

11

TimeSpanコードは .NET 4 で動作しますが、4 に重大な変更があったため、3.5 では動作しませんIFormattable(以下を参照)。

3.5以下でできることは、に変換しTimeSpanDateTime使用することToStringです:

DateTime dtime = DateTime.MinValue.Add(TimeDifference);
string result = dtime.ToString(@"hh\:mm\:ss");

ここでは、動作していないバージョンと動作しているバージョンを確認できます: http://ideone.com/Ak1HuD


編集それが時々機能する理由とそうでない場合がある理由は、.NET TimeSpan 4.0.IFormattableString.Format

于 2013-01-31T09:20:27.357 に答える
7

コードは正常に動作するはずです(マイナーな構文エラーを削除した後)。次の例を検討してください。

TimeSpan TimeDifference = DateTime.Now - DateTime.Now.AddHours(-6);
string result = string.Format(@"{0:hh\:mm\:ss}", TimeDifference);
Console.WriteLine("TimeSpan: {0}", TimeDifference.ToString());
Console.WriteLine("Formatted TimeSpan: {0}", result);

出力:

TimeSpan: 05:59:59.9990235
Formatted TimeSpan: 05:59:59
于 2013-01-31T09:16:45.777 に答える
5

私にとってはうまくいきます。

たとえば、このプログラム:

using System;

namespace Demo
{
    public static class Program
    {
        private static void Main(string[] args)
        {
            DateTime then = new DateTime(2013, 1, 30, 0, 1, 3);
            TimeSpan ts = DateTime.Now - then;

            Console.WriteLine(ts.ToString());
            Console.WriteLine(ts.ToString(@"hh\:mm\:ss"));
            Console.WriteLine(string.Format(@"{0:hh\:mm\:ss}", ts));

            // Or, with rounding:
            TimeSpan rounded = TimeSpan.FromSeconds((int)(0.5 + ts.TotalSeconds));
            Console.WriteLine(rounded.ToString(@"hh\:mm\:ss"));
        }
    }
}

次のようなものを出力します。

1.09:20:22.5070754
09:20:22
09:20:22
09:20:23 <- Note rounded up to :23
于 2013-01-31T09:18:48.737 に答える