我正在尝试制作一个程序,要求用户以24小时格式输入时间(hh:mm)。我然后将它放入一个字符串和.split(':')它分隔小时和分钟,然后使它成为一个大整数。例如:用户输入“18:40”然后将其解释为1840并在数组中找到它的值(我正在处理运输时间表)。我遇到的巨大麻烦是确保用户有一个有效的输入并要求用户再次尝试:99:50或12:80输入。但非常困惑,因为我还必须检查数组,如果用户试图提前到达,则会返回错误消息。对不起的措辞感到抱歉。
答案 0 :(得分:1)
这就是我在 C# 中的做法:
bool validTime(string time) {
return TimeSpan.TryParse(time, out TimeSpan t);
}
答案 1 :(得分:0)
您可以拆分字符串,然后单独转换为整数。如果它们在一个范围内,则验证每个。不要把时间和分钟联系起来。如果你想要1个整数,你可能需要它作为分钟。 (hours * 60) + minutes
您应该使用DateTime.TryParse()
。因为这是一种更好的方式。
答案 2 :(得分:0)
如果您只是想检查用户输入是否在有效范围内,如您所知,只需按原样拆分字符串。在int
中对零件进行分区并验证零件。
public bool CheckUserInput(string ui)
{
string[] parts = ui.Split(':');
if (parts.Count()==2)
{
int hour = int.Parse(parts[0]);
int mins = int.Parse(parts[1]);
if (hour >= 0 && hour < 24 && mins >= 0 && mins < 60)
return true;
}
return false;
}
答案 3 :(得分:-1)
将字符串解析为DateTime
,然后使用它。此外,最好将时间以适当的格式存储在数据库中,例如,为time。
string input = "18:40";
DateTime time;
var ok = DateTime.TryParse(input, out time);
if (ok) {
var timeString = string.Format("{0:00}{1:00}", time.Hour, time.Minute);
}
else {
throw new ArgumentException($"Invalid input, expected time in format HH:MM. Actual input was '{input}'.", nameof(input));
}
修改:使用带前导零的格式字符串