检查有效的日间和分钟(改进代码)

时间:2016-06-15 20:14:56

标签: c#

我有一个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;
}

我不喜欢这些代码,无论如何都要改进这个。

4 个答案:

答案 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对象进行检查