C# 时间跨度字符串格式

C# 时间跨度字符串格式,c#,string,.net-3.5,timespan,C#,String,.net 3.5,Timespan,我需要以如下所示的特定格式输出一个时间跨度:- TimeSpan TimeDifference = DateTime.Now - RandomDate; 我正在格式化时间跨度,如下所示:- string result = string.Format(@"{0:hh\:mm\:ss}", TimeDifference); 结果如下所示:- string result = string.Format(@"{0:hh\:mm\:ss}", TimeDifference); “00:16:45.6

我需要以如下所示的特定格式输出一个时间跨度:-

TimeSpan TimeDifference = DateTime.Now - RandomDate;
我正在格式化时间跨度,如下所示:-

string result = string.Format(@"{0:hh\:mm\:ss}", TimeDifference);
结果如下所示:-

string result = string.Format(@"{0:hh\:mm\:ss}", TimeDifference);
“00:16:45.6184635”

如何将这些秒舍入到小数点后0位

Expected Result = 00:16:46

谢谢

您的代码应该可以正常工作(在删除小语法错误之后)。考虑下面的例子:

TimeSpan TimeDifference = DateTime.Now - DateTime.Now.AddHours(-6);
string result = string.Format(@"{0:hh\:mm\:ss}", TimeDifference);
Console.WriteLine("TimeSpan: {0}", TimeDifference.ToString());
Console.WriteLine("Formatted TimeSpan: {0}", result);
输出:

TimeSpan: 05:59:59.9990235
Formatted TimeSpan: 05:59:59
对我来说很好

例如,此程序:

using System;

namespace Demo
{
    public static class Program
    {
        private static void Main(string[] args)
        {
            DateTime then = new DateTime(2013, 1, 30, 0, 1, 3);
            TimeSpan ts = DateTime.Now - then;

            Console.WriteLine(ts.ToString());
            Console.WriteLine(ts.ToString(@"hh\:mm\:ss"));
            Console.WriteLine(string.Format(@"{0:hh\:mm\:ss}", ts));

            // Or, with rounding:
            TimeSpan rounded = TimeSpan.FromSeconds((int)(0.5 + ts.TotalSeconds));
            Console.WriteLine(rounded.ToString(@"hh\:mm\:ss"));
        }
    }
}
输出类似于:

1.09:20:22.5070754
09:20:22
09:20:22
09:20:23 <- Note rounded up to :23
1.09:20:22.5070754
09:20:22
09:20:22

09:20:23您的代码可以与.NET 4一起使用,但不能与3.5一起使用,因为在4上有一个突破性的更改,
TimeSpan
现在实现了
IFormattable
(见下文)

在3.5或更低版本上,您可以将
TimeSpan
转换为
DateTime
,并使用
ToString

DateTime dtime = DateTime.MinValue.Add(TimeDifference);
string result = dtime.ToString(@"hh\:mm\:ss");
在这里您可以看到非工作+工作版本:



Edit我认为它有时有效,有时无效的原因在于它实现了什么。

我认为他可能希望时间四舍五入到
06:00:00
。但是看看ideone:我假设它与
string.Format
@TimSchmelter框架相关。你的答案到哪里去了?@Derek:从我开始删除我不确定是什么原因导致了您的问题,以及为什么有时会出现问题。@Derek:又添加了一次。从3.5到4.0这是一个突破性的变化,你能显示预期的结果吗?谢谢Tim,非常感谢。这很奇怪,我认为这个问题一定与我从DateTime中扣除的DateTime有关。现在在我的应用程序中。如上面的例子所示,我的代码确实有效。@Derek:在3.5版中编辑了我的答案,通过将
TimeSpan
转换为
DateTime
,提供了一种方法。这些示例之所以有效,是因为它们只需加上整小时,那么分数秒就没有舍入问题。+1 Tim,很好的解释,
TimeSpan.ToString
在.Net 2.0中没有字符串格式的重载。这是因为您至少使用了.Net 4而不是OP的3.5。我认为,正如我上面的示例中所述,舍入也应该为.Net 3.5修复。是的,我认为是这样。它只是忽略了一个事实,即OP(或任何使用低于4的.NET版本的人)的其他所有功能都不起作用