时间跨度字符串中只需要 HH:MM:SS
Need only HH:MM:SS in time span string
我有一个时间跨度字符串作为
1.21:00:00
这意味着 45 小时,我需要它,因为
45:00:00
可以用 c# 实现吗?
您可以使用 Span.TotalHours
属性 从时间跨度中获取总小时数。
TimeSpan span;
string timeSpan = "1.21:00:00";
TimeSpan.TryParse(timeSpan, out span);
double hours = span.TotalHours;
不幸的是,我认为 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,以使您的所有 date/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
只是添加我的答案,因为字符串格式比当前建议更容易完成。
var ts = TimeSpan.Parse("1.21:00:00");
string.Format("{0}:{1:mm}:{1:ss}", ts.TotalHours, ts); // 45:00:00
与乔恩的回答不同,它不需要转义。而且与 Soner 的回答不同,它不需要两次传递参数。
编辑
对于小数 TotalHours,您可能希望像这样降低该值:
var ts = TimeSpan.Parse("1.21:55:00");
string.Format("{0}:{1:mm}:{1:ss}", Math.Floor(ts.TotalHours), ts);
我有一个时间跨度字符串作为
1.21:00:00
这意味着 45 小时,我需要它,因为
45:00:00
可以用 c# 实现吗?
您可以使用 Span.TotalHours
属性 从时间跨度中获取总小时数。
TimeSpan span;
string timeSpan = "1.21:00:00";
TimeSpan.TryParse(timeSpan, out span);
double hours = span.TotalHours;
不幸的是,我认为 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,以使您的所有 date/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
只是添加我的答案,因为字符串格式比当前建议更容易完成。
var ts = TimeSpan.Parse("1.21:00:00");
string.Format("{0}:{1:mm}:{1:ss}", ts.TotalHours, ts); // 45:00:00
与乔恩的回答不同,它不需要转义。而且与 Soner 的回答不同,它不需要两次传递参数。
编辑
对于小数 TotalHours,您可能希望像这样降低该值:
var ts = TimeSpan.Parse("1.21:55:00");
string.Format("{0}:{1:mm}:{1:ss}", Math.Floor(ts.TotalHours), ts);