我有一个22:19:37格式的字符串,其中22是Days,19是小时,37是分钟,这是我写的用于验证小时和分钟的内容。
string value = "22 : 19 : 37";
string[] time = (value as string).Split(new char[] { ':' });
if (time.Length != 3)
{
Console.WriteLine("Error");
return;
}
int DD = System.Convert.ToInt32(time[0]);
int HH = System.Convert.ToInt32(time[1]);
int MM = System.Convert.ToInt32(time[2]);
// Hour should be less than 24
if (HH > 23)
{
Console.WriteLine("Invalid Hour Error");
return;
}
// Minutes should be less than 60
if (MM > 59)
{
Console.WriteLine("Invalid Minute Error");
return;
}
我不喜欢这些代码,无论如何都要改进这个。
答案 0 :(得分:4)
DateTime.TryParse
我相信这更快,这意味着你不必使用尝试/捕获。
e.g:
DateTime temp;
if(DateTime.TryParse(yourString, out temp))
//yay
else
// :(
答案 1 :(得分:2)
试试这个
string dateString = "22 : 19 : 37";
string format = "dd : HH : mm";
DateTime result;
var provider = System.Globalization.CultureInfo.InvariantCulture;
try {
result = DateTime.ParseExact(dateString, format, provider);
Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException) {
Console.WriteLine("{0} is not in the correct format.", dateString);
}
答案 2 :(得分:2)
由于这似乎是TimeSpan而不是DateTime,因此这里是@Nkosi的变体。也使用TryParseExact而不是ParseExact。它摆脱了丑陋的尝试。
string timeSpanString = "22 : 19 : 37";
// For TimeSpan parsing all separator values need to be escaped with \\
string timeSpanFormat = "dd\\ \\:\\ hh\\ \\:\\ mm";
TimeSpan result;
var provider = System.Globalization.CultureInfo.InvariantCulture;
if (TimeSpan.TryParseExact(timeSpanString, timeSpanFormat, provider, out result))
{
Console.WriteLine("{0} converts to {1}.", timeSpanString, result);
}
else
{
Console.WriteLine("{0} is not in the correct format.", timeSpanString);
}
我认为这更清楚地显示了意图,因为@Nkosi代码将每月输出一年的数据。
答案 3 :(得分:0)
我同意@ user3378165。但如果无法更改字符串格式,则可以使用正则表达式检查字符串是否为格式为HH的有效时间字符串:MM:SS 这是一个正则表达式:
^\d{2}:([0-1]\d|2[0-3]):([0-5]\d)$
接下来,使用Regex
对象进行检查