我使用以下代码在应用程序的状态栏中显示任务的已用时间。
public void DisplayDuration(TimeSpan duration)
{
string formattedDuration;
if (duration.TotalMilliseconds < 2000)
formattedDuration = string.Format("{0} ms", duration.TotalMilliseconds);
else if (duration.TotalSeconds < 60)
formattedDuration = string.Format("{0} sec", duration.TotalSeconds);
else
formattedDuration = string.Format("{0} min", duration.TotalMinutes);
this.TimingLabel.Text = formattedDuration;
}
this.TimingLabel是winform页脚中statusStrip控件中的标签。
但是我在Windows XP与Windows 7上的结果完全不同
Windows XP:
Windows 7
为什么单位出现在Windows 7之前?
我已检查区域设置两台计算机都设置为美国,并具有相同的日期时间格式。非常确定它是在两台机器上运行的相同代码。 在一些非常简单的代码中,这是非常奇怪的行为。
作为后续跟进:我对我的代码进行了以下更改,但仍然存在同样的问题:
formattedDuration = string.Format("{0} ms", duration.TotalMilliseconds.ToString());
答案 0 :(得分:7)
我认为最有可能的是布局问题,而不是String.Format
。区域设置不应该是一个因素,因为您不是要求TimeSpan
格式化其值。相反,您要求String
格式化字符串“ms”后跟一个数字。如果它在输出中将它们反转,那将只是一个错误。
更有可能的是,该数字是通过容器布局约束中的错误进行修剪的。如果我在屏幕截图中看起来非常努力,那么ms
字符串的左边会出现一个分隔符。
尝试给所有东西一个相当大的固定宽度,看看是否有正确的显示。
答案 1 :(得分:0)
实际答案是状态中的标签将RightToLeft错误地设置为true。 Windows XP不支持此属性,但使用的是Windows 7 +。