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

本文关键字:SS 时间跨度 字符串 MM HH | 更新日期: 2023-09-27 18:01:58

我有一个时间跨度字符串

1.21:00:00

它的意思是45小时,我需要它作为

45:00:00

可以在c#中做到这一点吗?

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

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

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);

不幸的是,我不认为TimeSpan自定义格式使这可行:(

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

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以使你所有的日期/时间代码更清晰,但我有偏见:)

如果这是字符串并且您的CurrentCulture:作为TimeSeparator,您可以使用like;

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

您可以使用Span.TotalHours属性从时间跨度中获取总小时数。

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