我需要显示经过时间跨度的最简单版本。有没有准备好的事情呢?
样品:
HH:mm:ss
10:43:27 > 10h43m27s
00:04:12 > 4m12s
00:00:07 > 7s
我想我需要一个格式提供程序来消磨时间。
答案 0 :(得分:9)
简单的扩展方法应该足够了:
static class Extensions
{
public static string ToShortForm(this TimeSpan t)
{
string shortForm = "";
if (t.Hours > 0)
{
shortForm += string.Format("{0}h", t.Hours.ToString());
}
if (t.Minutes > 0)
{
shortForm += string.Format("{0}m", t.Minutes.ToString());
}
if (t.Seconds > 0)
{
shortForm += string.Format("{0}s", t.Seconds.ToString());
}
return shortForm;
}
}
用以下方法测试:
TimeSpan tsTest = new TimeSpan(10, 43, 27);
string output = tsTest.ToShortForm();
tsTest = new TimeSpan(0, 4, 12);
output = tsTest.ToShortForm();
tsTest = new TimeSpan(0, 0, 7);
output = tsTest.ToShortForm();
答案 1 :(得分:8)
这是一个单行(几乎),假设你有TimeSpan
objectL
(new TimeSpan(0, 0, 30, 21, 3))
.ToString(@"d\d\ hh\hmm\mss\s")
.TrimStart(' ','d','h','m','s','0');
示例代码输出
30m21s
为了示例,第一行只创建了一个TimeSpan
对象,.ToString
按照您要求的格式对其进行格式化,然后.TrimStart
删除您不喜欢的主要字符不需要。
答案 2 :(得分:3)
我不认为这可以通过简单的方式完成自定义格式序列化程序 - 我只是自己编写:
TimeSpan delta = TimeSpan.Parse("09:03:07");
string displayTime = string.Empty;
if (delta.Hours > 0)
displayTime += delta.Hours.ToString() + "h";
if (delta.Minutes > 0)
displayTime += delta.Minutes.ToString() + "m";
if (delta.Seconds > 0)
displayTime += delta.Seconds.ToString() + "s";
请注意,这仅适用于正时间跨度。
答案 3 :(得分:1)
您可以使用string.Format
来实现此目的,以及一些条件语句:
public static string GetSimplestTimeSpan(TimeSpan timeSpan)
{
var result = string.Empty;
if (timeSpan.Days > 0)
{
result += string.Format(
@"{0:ddd\d}", timeSpan).TrimStart('0');
}
if (timeSpan.Hours > 0)
{
result += string.Format(
@"{0:hh\h}", timeSpan).TrimStart('0');
}
if (timeSpan.Minutes > 0)
{
result += string.Format(
@"{0:mm\m}", timeSpan).TrimStart('0');
}
if (timeSpan.Seconds > 0)
{
result += string.Format(
@"{0:ss\s}", timeSpan).TrimStart('0');
}
return result;
}
虽然看到BrokenGlass的答案,我很想说在这里使用Format
是有点矫枉过正。但是,它允许您根据需要调整经过时间跨度的每个元素的输出。
答案 4 :(得分:1)
这是我的看法:
Dim TimeTaken As String = TimeSpan.ToString("g") ' Supply TimeSpan
If TimeTaken.Contains("0:00") Then
TimeTaken = TimeTaken.Remove(0, 3)
ElseIf TimeTaken.Contains("0:0") Then
TimeTaken = TimeTaken.Remove(0, 2)
End If