今天进行编码时,我注意到时间跨度和格式化字符串有些奇怪。我试图打印一个时间跨度,例如01:03:37
为1: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的表现不同?
答案 0 :(得分:7)
由于您的格式字符串不适用于TimeSpan
而TimeSpan.ToString()
始终返回(from MSDN):
表示值的字符串 这个例子。返回值是 形式:
[ - ] HH [d]:MM:SS [.ff]
答案 1 :(得分:6)
在.Net 4.0之前,TimeSpans不支持格式字符串。
在.Net 4.0中,格式字符串为documented。
答案 2 :(得分:0)