将持续时间从0:00或00:00转换为00:00:00
本文关键字:转换 持续时间 | 更新日期: 2023-09-27 18:08:31
我正在开发一个应用程序,该应用程序可以转换C#中媒体文件的STRING持续时间。我如何使其输出如下:
a。1:34(1分34秒(至凌晨00:01:34
b。0:05(5秒(至00:00:05
c。1:10:05至01:10:05
结果将显示在名为lblDuration的标签中。
我使用的是VS2008 C#。
如果你能帮忙的话,谢谢。
我会将其解析为TimeSpan
,然后使用重新格式化
string text = timeSpan.ToString("hh':'mm':'ss");
这是假设您正在使用。NET 4及其对自定义CCD_ 2格式的支持。之前NET 4,你必须自己写——不太难,但比上面更难。
首先分析时间跨度是另一回事——例如,可以使用多种格式的TimeSpan.TryParseExact
传递。
解析然后重新格式化的好处是,您可以验证您是否有合理的日期——例如,不是"99:99"。
用冒号(":"(拆分字符串,将每个元素转换为数字,并使用%02d打印每个数字,在第一个和第二个以及第二个和第三个之间放置一个":">
我认为这里最好的做法是使用TimeSpan.TryParse
,但我们必须小心——如果该方法看到一个只有一个:
的输入字符串,它会将其解析为hours:minutes
!
(TryParseExact
变得很麻烦,因为没有一种格式同时接受前导零和前导零的缺失(。
因此:
var input = "5:06";
TimeSpan ts;
var parseSuccessful = TimeSpan.TryParse(input, out ts);
if (parseSuccessful)
{
if (input.Count(c => c == ':') == 1)
{
// TryParse parsed this as hh:mm but we want it to mean mm:ss
// so scale appropriately
ts = new TimeSpan(ts.Ticks / 60);
}
Console.WriteLine(ts.ToString(@"hh':mm':ss"));
}
如何将其解析为DateTime
对象,然后以这种方式格式化(例如(
DateTime.ParseExact("1:32", 'H:mm', CultureInfo.InvariantCulture).ToString("HH:mm:ss");
只是澄清一下-上述解决方案是一个变通方案。NET版本4之前,您无法访问自定义TimeSpan格式。如果您正在使用。NET 4,那么我肯定会建议使用TimeSpan
,因为@Jon建议使用
private static string GetLable(string text)
{
if (string.IsNullOrEmpty(text))
return "00:00:00";
var builder = new StringBuilder();
var arr = text.Split(new[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
if (arr.Length == 2)
builder.Append("00:");
var i = 0;
foreach (var t in arr)
{
builder.Append(t.Length == 1 ? "0" + t : t);
if (arr.Length - 1 != i++)
builder.Append(":");
}
return builder.ToString();
}
public void convertString()
{
string str;
str = "your time";
int length = str.Length;
if (length == 4)
{
str = "00" + ":" +"0"+ str;
}
if (length == 5)
{
str = "00" + ":" + str;
}
}
static void Main(string[] args)
{
Program p = new Program();
p.convertString();
}