c# - 将 TimeSpan 格式化为倒数计时器的正确方法是什么?

标签 c# string-formatting timespan

我有一个在网站上运行的计时器。它将检索用户在订单到期之前的时间跨度。在大多数情况下,这工作正常,服务器将返回初始剩余时间,javascript 将进行倒计时。所以显示

2:30 2:29 2:28

然后出于某种原因,在某些页面加载时(似乎发生在计时器剩余时间少于 60 秒时),格式变为

-1:0-45 -1:0-46 -1:0-47

这是负责格式化时间跨度的代码:

<%= (TimeRemaining.TotalMinutes - 1).ToString("N0") %>:<%= TimeRemaining.Seconds.ToString("N0").PadLeft(2,'0') %>

我也刚刚尝试了以下结果相同。

<%= String.Format("{0:0}:{1:00}", TimeRemaining.TotalMinutes-1, TimeRemaining.Seconds)%>

我还检查了 TimeRemaining,如果 TotalSeconds <= 0,那么它只会返回一个 new TimeSpan(0),因此它永远不会变为负值。不是 javascript 搞砸了倒计时,因为我可以禁用它但仍然看到乱七八糟的格式化时间。

有没有更好/更干净的方法来做到这一点?

最佳答案

我能看到的一个错误是你不应该在这里减去一个:

TimeRemaining.TotalMinutes - 1

如果剩余时间少于 30 秒,减去一分钟,您将得到一个负数。

TimeSpan timeRemaining = TimeSpan.FromSeconds(25);
string s = (timeRemaining.TotalMinutes - 1).ToString("N0");
Console.WriteLine(s);

结果:

-1

相反,您应该将此数字四舍五入为一个整数(也称为截断)。你可以用 Math.Floor 来做到这一点, 但也可以将数字转换为整数以达到相同的效果:

(int)TimeRemaining.TotalMinutes

至于秒数,我不知道为什么会出错。我认为这是因为您的剩余时间实际上可能会变为负值。该错误似乎不在您发布的代码中。

关于c# - 将 TimeSpan 格式化为倒数计时器的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3444321/

相关文章:

c# - ClosedXML 添加带条件格式的工作表

c# - 将字符串更改为第一个字符大写,其余字符小写

c# - 使用 Facebook C# SDK 发布帖子

Python 更改字符串的打印方式

c# - 以秒和分钟为单位转换计时器间隔

c# - 在 asp.net 中,Repeater 无法使用页面上的 Div 正确触发

arrays - 如何在powershell中将string.format与字符串数组一起使用

Javascript 正则表达式将给定字符串中的 'n' 相同连续字符减少为单个字符

c# - DataGridView 中的 TimeSpan 选择器允许超过 24 小时

javascript - 如何在javascript中反序列化JSON时间跨度