在时间跨度字符串中只需要HH:MM:SS

时间:2015-07-09 06:16:01

标签: c# timespan

我有一个时间跨度字符串

1.21:00:00

这意味着45个小时,我需要它

45:00:00

是否可以在c#中执行此操作?

4 个答案:

答案 0 :(得分:4)

只需添加我的答案,因为字符串格式化可以比当前建议更容易完成。

var ts = TimeSpan.Parse("1.21:00:00");
string.Format("{0}:{1:mm}:{1:ss}", ts.TotalHours, ts); // 45:00:00

与Jon的回答不同,它并不需要转义。与Soner的答案不同,它不需要两次传递参数。

修改

对于小数TotalHours,您可能希望将值放在这样:

var ts = TimeSpan.Parse("1.21:55:00");      
string.Format("{0}:{1:mm}:{1:ss}", Math.Floor(ts.TotalHours), ts);

答案 1 :(得分:3)

不幸的是,我不认为TimeSpan custom formatting使这个可行:(

您可以自己执行字符串格式化...

string text = (int) span.TotalHours + span.ToString(@"\:mm\:ss");

或者

string text = string.Format(@"{0}:{1:mm\:ss}", (int) span.TotalHours, span);

...或者你可以使用我的Noda Time库, 允许这样做:

// Or convert from a TimeSpan to a Duration
var duration = Duration.FromHours(50);
var durationPattern = DurationPattern.CreateWithInvariantCulture("HH:mm:ss");
Console.WriteLine(durationPattern.Format(duration)); // 50:00:00

显然我建议将整个代码库移到Noda Time,以使所有日期/时间代码更清晰,但我有偏见:)

答案 2 :(得分:2)

如果这是字符串而您的CurrentCulture :TimeSeparator,则可以使用;

var ts = TimeSpan.Parse("1.21:00:00");
string.Format("{0}:{1:mm}:{2:ss}", ts.TotalHours, ts, ts); // 45:00:00

或者你可以像Jon那样组合分钟和小号;

string.Format(@"{0}:{1:mm\:ss}", ts.TotalHours, ts) // 45:00:00

答案 3 :(得分:0)

您可以使用Span.TotalHours属性来获取某个时间段的总小时数。

TimeSpan span;
string timeSpan = "1.21:00:00";
TimeSpan.TryParse(timeSpan, out span);
double hours = span.TotalHours;