C#TimeSpan.毫秒格式为2位

C#TimeSpan.毫秒格式为2位,c#,visual-studio-2017,timespan,C#,Visual Studio 2017,Timespan,我有一个计时器,我想显示分:秒:数百秒。 因为C#timespan没有一个方法可以获取数百毫秒,而只有毫秒,所以我需要以某种方式格式化它 TimeSpan ts = stopWatch.Elapsed; currentTime = String.Format("{0:00}:{1:00}:{2:00}", ts.Minutes, ts.Seconds, Math.Round(Convert.ToDecimal(ts.Milliseconds),2)); ClockTextBlock.Text =

我有一个计时器,我想显示
分:秒:数百秒
。 因为C#timespan没有一个方法可以获取数百毫秒,而只有毫秒,所以我需要以某种方式格式化它

TimeSpan ts = stopWatch.Elapsed;
currentTime = String.Format("{0:00}:{1:00}:{2:00}", ts.Minutes, ts.Seconds, Math.Round(Convert.ToDecimal(ts.Milliseconds),2));
ClockTextBlock.Text = currentTime;
我尝试了
Math.Round
,但什么也没发生。结果仍然在1-3位之间,如下所示:

01:12:7
01:12:77
01:12:777
我希望格式总是像这样

01:12:07
01:12:77
您可以使用a来表示这一点(这里我们只显示毫秒的前两位,用
ff
,表示百分之一):

您可以使用a来表示这一点(这里我们只显示毫秒的前两位,用
ff
,表示百分之一):

你需要:

String.Format(@"Time : {0:mm\:ss\.ff}", ts)
其中,
“ts”
是您的
TimeSpan
对象。您也可以将其扩展到包括小时等。fff是第二个分数的有效位数,您需要:

String.Format(@"Time : {0:mm\:ss\.ff}", ts)

其中,
“ts”
是您的
TimeSpan
对象。您也可以将其扩展到包括小时等。
fff
stuff是第二个分数的有效位数

因为毫秒是1/1000秒,所以您只需将毫秒除以10即可得到100秒。如果你担心四舍五入问题,那么在除法之前手动进行

    int hundredths = (int)Math.Round((double)ts.Milliseconds / 10);

    currentTime = String.Format("{0}:{1}:{2}", ts.Minutes.ToString(D2), ts.Seconds.ToString(D2), hundredths.ToString(D2);

    ClockTextBlock.Text = currentTime;

因为一毫秒是1/1000秒,所以你需要做的就是将毫秒除以10得到100秒。如果你担心四舍五入问题,那么在除法之前手动进行

    int hundredths = (int)Math.Round((double)ts.Milliseconds / 10);

    currentTime = String.Format("{0}:{1}:{2}", ts.Minutes.ToString(D2), ts.Seconds.ToString(D2), hundredths.ToString(D2);

    ClockTextBlock.Text = currentTime;

您可以使用
Timespan
span设置
DateTime
类型时区和加号。 你会得到一个日期时间和格式

  DateTime timezone = new DateTime(1, 1, 1);

  TimeSpan span = stopWatch.Elapsed;

  ClockTextBlock.Text=(timezone + span).ToString("mm:ss:ff");

您可以使用
Timespan
span设置
DateTime
类型时区和加号。 你会得到一个日期时间和格式

  DateTime timezone = new DateTime(1, 1, 1);

  TimeSpan span = stopWatch.Elapsed;

  ClockTextBlock.Text=(timezone + span).ToString("mm:ss:ff");

只需将格式放入toString,它就会简单地显示所需的格式:)


只需将格式放入toString,它就会简单地显示所需的格式:)



您还可以使用DateTime对象作为开始时间,使用DateTime对象作为结束时间,也可以使用这些对象从初始时间和结束时间之间的差异中获取经过的时间…或您要查找的时间跨度。您还可以使用DateTime对象作为开始时间,使用DateTime对象作为结束时间,使用这些工具,您也可以从初始时间和结束时间之间的差异中获取经过的时间…或者您正在寻找的时间跨度。我使用了此解决方案;)但海报要求100秒。这是可行的,但686毫秒应该四舍五入到69@user3444696你读过这篇文章吗?“fff是第二个分数的有效位数”。根据“f”的数量,您将从秒分数中收到相同数量的有效数字。@user3444696确实如此-秒
f
表示百分之一百。第一个是十分之一。我刚刚编辑了我的评论。我很快就把它存起来了。看起来他/她想四舍五入到最近的第100位。我使用了此解决方案;)但海报要求100秒。这是可行的,但686毫秒应该四舍五入到69@user3444696你读过这篇文章吗?“fff是第二个分数的有效位数”。根据“f”的数量,您将从秒分数中收到相同数量的有效数字。@user3444696确实如此-秒
f
表示百分之一百。第一个是十分之一。我刚刚编辑了我的评论。我很快就把它存起来了。看起来他/她想绕到最近的100位,但海报要求100秒。这是可行的,但686毫秒应该四舍五入到69百分之一。@user3444696真的应该吗?你为什么这么认为?我注意到你也提交了一个答案,但没有总结出…好的答案。我把我的修好了,这样它就圆了。你的是百分之一百,但它不会圆。我为什么这么认为?试试这个:TimeSpan ts=newTimeSpan(3,2,3,2968);string str=string.Format(@“ts:{0:mm\:ss\.ff}),ts);控制台写入线(str)@user3444696我的意思是,为什么你认为数字应该向上取整而不是截断。最初,我认为这就是他使用Round()的原因。然而,它也有意义,因为686ms比68100更接近69100,689更接近——这似乎更正确。但海报要求100秒。这是可行的,但686毫秒应该四舍五入到69百分之一。@user3444696真的应该吗?你为什么这么认为?我注意到你也提交了一个答案,但没有总结出…好的答案。我把我的修好了,这样它就圆了。你的是百分之一百,但它不会圆。我为什么这么认为?试试这个:TimeSpan ts=newTimeSpan(3,2,3,2968);string str=string.Format(@“ts:{0:mm\:ss\.ff}),ts);控制台写入线(str)@user3444696我的意思是,为什么你认为数字应该向上取整而不是截断。最初,我认为这就是他使用Round()的原因。然而,它也有意义,因为686ms比68100更接近69100,689更接近——这似乎更正确。但海报要求100秒。这是可行的,但686毫秒应该四舍五入到69毫秒,但海报要求的是100秒。这是可行的,但686毫秒应该四舍五入为69。为什么要将
int
转换为
double
,然后调用
Round
,将其四舍五入为整数值(已经是整数值),然后再转换回
int
?第一行什么也不做。它可以被删除,第二行可以是
inthundredths=ts.毫秒/10
你遗漏了什么吗?为什么你要将
int
转换成
double
,然后调用
Round
,将其四舍五入为一个整数值(已经是整数值),然后再将其转换回
int
?第一行没用