TimeSpan和DateTime的格式化字符串之间的不同行为

时间:2010-08-03 11:21:11

标签: c# datetime timespan

今天进行编码时,我注意到时间跨度和格式化字符串有些奇怪。我试图打印一个时间跨度,例如01:03:371:03:37(没有领先的0小时)。所以我使用了格式字符串h:mm:ss。然而,这给了我一个领先的0.如果我将TimeSpan转换为DateTime并再次做同样的事情,h格式化字符串就像我预期的那样工作。

示例控制台程序:

class Program
{
    static void Main(string[] args)
    {
        var time = new TimeSpan(01, 03, 37);

        var culture = new CultureInfo("sv-SE");

        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;

        Console.WriteLine(time.ToString());

        Console.WriteLine(string.Format(culture, "{0:h:mm:ss}", time));
        Console.WriteLine(string.Format(culture, "{0:hh:mm:ss}", time));

        Console.WriteLine((new DateTime(time.Ticks)).ToString("h:mm:ss", culture));
        Console.WriteLine((new DateTime(time.Ticks)).ToString("hh:mm:ss", culture));

        Console.ReadKey();
    }
}

输出:

01:03:37
01:03:37  // <-- expected: 1:03:37
01:03:37
1:03:37
01:03:37

为什么TimeSpan和DateTime的表现不同?

3 个答案:

答案 0 :(得分:7)

由于您的格式字符串不适用于TimeSpanTimeSpan.ToString()始终返回(from MSDN):

  

表示值的字符串   这个例子。返回值是   形式:

     

[ - ] HH [d]:MM:SS [.ff]

答案 1 :(得分:6)

在.Net 4.0之前,TimeSpans不支持格式字符串。

在.Net 4.0中,格式字符串为documented

答案 2 :(得分:0)