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版本的人)的其他所有功能都不起作用