为什么这个特定的TimeSpan格式字符串在.NET 4中停止工作?

Tom*_*idd 5 .net c# formatting timespan .net-4.0

考虑一下这个代码(预装了一个例子):

DateTime dt1 = DateTime.Parse("7/30/2010 9:33:29.1234567 AM");
DateTime dt2 = DateTime.Parse("6/30/2010 9:33:00.7654321 AM");

TimeSpan ts = dt1 - dt2;

Console.WriteLine(string.Format( "{0:d.hh:mm:ss.ff}", ts ));
Run Code Online (Sandbox Code Playgroud)

这是我至少从.NET 1.1开始工作的一段代码的代表.

它在1.1到3.5中运行良好,具有以下输出(对于这些dummied up输入):

30.00:00:28.3580246
Run Code Online (Sandbox Code Playgroud)

但现在我发现它在.NET 4中死了,并显示错误消息:

Input string was not in a correct format.

因此,就好像.NET 4突然决定它不喜欢这种格式的时差.将线路更改为,比方说

Console.WriteLine(string.Format( "{0}", ts.ToString("d.hh:mm:ss.ff") ));
Run Code Online (Sandbox Code Playgroud)

具有相同的效果.

现在我注意到的事情是,如果我只是默认,.ToString()我得到相同的输出.我认为思考过程是这是针对未来版本中默认格式变化的保险政策.但现在它看起来并不像是一种选择.

有谁知道为什么这会改变,如果我做错了什么或者是否有最佳实践方法来做我想要完成的事情?

Mit*_*eat 6

有一个配置开关可以恢复TimeSpan的旧行为.