将字符串中的文本格式设置为hh:mm:ss,仅在需要时设置小时

本文关键字:设置 小时 ss mm 格式 文本 字符串 hh | 更新日期: 2023-09-27 18:29:50

我想格式化字符串中的一些文本。因此,如果我输入文本0759,它应该将其格式化为07:59 (minutes and seconds)

同样,它应该像这样工作(伪代码)

输入759->输出07:59

输入10545->输出01:05:45(小时、分钟、秒)

输入5->输出00:05

我曾想过使用string.Format(),但作为一个新手,我真的不知道如何做到这一点。

谢谢!

将字符串中的文本格式设置为hh:mm:ss,仅在需要时设置小时

你必须经历几个不同的环节才能完成这项任务。您需要将数字转换为字符串,并将它们填充到适当的位数(6)。然后,您必须调用DateTime.ParseExact并提供相应的信息。下面的代码应该适用于您需要的一切:

void Main()
{
var i = 10545;
var t = i.ToString().PadLeft(6, '0');
var d = DateTime.ParseExact(t, "HHmmss", System.Globalization.CultureInfo.InvariantCulture );
Console.WriteLine(string.Format("{0:HH:mm:ss}", d));
}

你需要使用24小时格式来获得你想要的确切小时、分钟、秒。任何超过235959的都会出错,所以你必须以不同的方式处理。

请参阅DateTime.ParseExact()的文档和格式代码的文档

您可以使用此方法:

public static TimeSpan? TryParseTimeSpan(string input)
{
    TimeSpan? ts = (TimeSpan?)null;
    if (!string.IsNullOrWhiteSpace(input))
    {
        input = input.Trim();
        int length = input.Length % 2 == 0 ? input.Length : input.Length + 1;
        int count = length / 2;
        if(count > 3) return null;
        input = input.PadLeft(count * 2, '0');
        string[] validFormats = new[] { "HHmmss", "mmss", "ss" };
        DateTime dt;
        if (DateTime.TryParseExact(input, validFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
            ts = dt.TimeOfDay; 
    }
    return ts;
}

但是,它不接受89秒的第二部分,这不是有效的输入(imho)。

使用此样本输入进行测试:

List<string> inputs = new List<string> { "78", "10545", "5" };
IEnumerable<TimeSpan> timeSpans = inputs
    .Select(i => TryParseTimeSpan(i))
    .Where(ts => ts.HasValue)
    .Select(ts => ts.Value);
foreach (TimeSpan ts in timeSpans)
    Console.WriteLine(ts.ToString());

演示

输出:

01:05:45
00:00:05
List<string> inputs = new List<string> { "78", "10545", "5" };
IEnumerable<TimeSpan> timeSpans = inputs
    .Select(i => TryParseTimeSpan(i))
    .Where(ts => ts.HasValue)
    .Select(ts => ts.Value);
foreach (TimeSpan ts in timeSpans)
    Console.WriteLine(ts.ToString());

首先,您需要配置00:00的格式,您希望使用格式字符串"00:00"

string input = 0789
input = String.Format("00:00",input); //input is now 07:89

但是,对于超过4位的值,这将不起作用。使用CCD_ 5对象将是处理这些对象的更好方式;第二组分

时间跨度:http://msdn.microsoft.com/en-us/library/system.timespan.aspx

格式来源:http://msdn.microsoft.com/en-us/library/system.string.format.aspx