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

时间:2013-08-30 15:00:33

标签: c# string text format

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

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

  

输入759 - >输出07:59

     

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

     

输入5 - >输出00:05

我考虑过使用string.Format(),但作为一个新手,我真的不知道该怎么做。

谢谢!

4 个答案:

答案 0 :(得分:1)

你必须跳过几个不同的箍才能完成这项工作。您需要将数字转换为字符串,并将它们填充到适当数量的位置(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的任何内容都会出错,因此您必须以不同的方式处理。

请参阅documentation了解DateTime.ParseExact()和documentation了解格式代码

答案 1 :(得分:1)

您可以使用此方法:

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秒的第二部分,这不是有效的输入(im​​ho)。

使用此示例输入进行测试:

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

DEMO

输出:

01:05:45
00:00:05

答案 2 :(得分:1)

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

答案 3 :(得分:0)

首先,你需要配置00:00的格式,你想要使用格式字符串"00:00"

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

但是,对于超过4位的值,这不起作用。使用TimeSpan对象将是处理这些对象的更好方法,因为它们已经具有分钟和时间。第二部分

TimeSpan:http://msdn.microsoft.com/en-us/library/system.timespan.aspx

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