C# 将字符串中的文本格式设置为hh:mm:ss,仅在需要时才设置小时数
我想把一些文本格式化成字符串。因此,如果我输入文本C# 将字符串中的文本格式设置为hh:mm:ss,仅在需要时才设置小时数,c#,string,text,format,C#,String,Text,Format,我想把一些文本格式化成字符串。因此,如果我输入文本0759,它应该将其格式化为07:59(分和秒) 同样,它应该像这样工作(伪代码) 输入759->输出07:59 输入10545->输出01:05:45(小时、分钟、秒) 输入5->输出00:05 我曾考虑过使用string.Format(),但作为一名新手,我真的不知道该怎么做 谢谢 首先,您需要为00:00配置格式。您可能希望使用格式字符串“00:00” 但是,这不适用于超过4位的值。使用TimeSpan对象将是处理这些对象的更好方法,因为它
0759
,它应该将其格式化为07:59(分和秒)
同样,它应该像这样工作(伪代码)
输入759->输出07:59
输入10545->输出01:05:45(小时、分钟、秒)
输入5->输出00:05
我曾考虑过使用string.Format()
,但作为一名新手,我真的不知道该怎么做
谢谢 首先,您需要为00:00配置格式。您可能希望使用格式字符串
“00:00”
但是,这不适用于超过4位的值。使用TimeSpan
对象将是处理这些对象的更好方法,因为它们已经有了分钟和秒组件
时间跨度:
格式来源:首先,您需要为00:00配置格式,您需要使用格式字符串
“00:00”
但是,这不适用于超过4位的值。使用TimeSpan
对象将是处理这些对象的更好方法,因为它们已经有了分钟和秒组件
时间跨度:
格式来源:要完成这项工作,你必须要跨越几个不同的障碍。您需要将数字转换为字符串,并将其填充到适当的位置(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()和格式代码,请参见。要实现这一点,您必须跳过几个不同的步骤。您需要将数字转换为字符串,并将其填充到适当的位置(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());
您可以使用以下方法:
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());
列表输入=新列表{“78”、“10545”、“5”};
IEnumerable timespan=输入
.选择(i=>TryParseTimeSpan(i))
.Where(ts=>ts.HasValue)
.选择(ts=>ts.Value);
foreach(时间跨度中的时间跨度ts)
Console.WriteLine(ts.ToString());
列表输入=新列表{“78”、“10545”、“5”};
IEnumerable timespan=输入
.选择(i=>TryParseTimeSpan(i))
.Where(ts=>ts.HasValue)
.选择(ts=>ts.Value);
foreach(时间跨度中的时间跨度ts)
Console.WriteLine(ts.ToString());
7分89秒?这就是你想要的吗?如果您在string.Format
上签出MSDN,不是需要8分29秒吗。。。如果是时间,您是否考虑过将其解析为TimeSpan
?如何获得该输入?我实际上已经读过关于TimeSpan的内容,但是我没有看到将格式(如0789)转换为07:89的方法。我看到了TimeSpan.FromSeconds()
,但在这种情况下这不起作用,因为它不是789秒(13:15)。@Jacobus21:89秒是多少?这是一个无效的输入,还是60+19秒会增加一分钟?7分89秒?这就是你想要的吗?如果您在string.Format
上签出MSDN,不是需要8分29秒吗。。。如果是时间,您是否考虑过将其解析为TimeSpan
?如何获得该输入?我实际上已经读过关于TimeSpan的内容,但是我没有看到将格式(如0789)转换为07:89的方法。我看到了TimeSpan.FromSeconds()
,但在这种情况下这不起作用,因为它不是789秒(13:15)。@Jacobus21:89秒是多少?这是一个无效的输入,还是60+19秒会增加一分钟?Console.WriteLine(ts.Hours==0?ts.ToString(“hh:mm”):ts.ToString()如果为零,代码>将满足删除小时列的要求。@Peter:是的,我的答案集中在分析时间跨度上。一旦你有了它,你就可以使用TimeSpan.ToString和自定义格式字符串。因为原始的问题标签包括string
text
和format
,我觉得这是问题的一个重要部分。Console.WriteLine(ts.Hours==0?ts.ToString(“hh:mm”):ts.ToString()如果为零,代码>将满足删除小时列的要求。@Peter:是的,我的答案集中在分析时间跨度上。一旦你有了它,你就可以将TimeSpan.ToString与自定义格式字符串一起使用。因为原始的问题标签包括字符串文本和格式,我觉得这是问题的一个重要部分。添加一些关于此答案如何帮助解决当前问题的解释和答案添加一些关于此答案如何帮助解决当前问题的解释和答案