2012-10-18 85 views
1

因此,我正在制作一个窗体,为学生的详细信息和国际学生提供一个单独的类。我需要验证我的学生/国际学生的年份分数是否大于0且小于100.解析和验证数字和日期时间输入

我也想要将出生日期显示为dd/mm/yyyy,但目前显示为那加上时间。

我将包括下面的代码:

第一出生日期

student1.DateOfBirth = DateTime.Parse(txtDateofbirth.Text).Date; 

if (string.IsNullOrEmpty(txtDateofbirth.Text)) 
{ 
    MessageBox.Show("Please enter a DoB"); 
} 

现在的年马克

try // Trying to do the thing in the curly braces 
{ 
    student1.YearMark = Int32.Parse(txtYearMark.Text); 
} 
catch (Exception) // If it doesn't work skip the crash and print this 
{ 
    MessageBox.Show("The Year mark must be a number and can't be empty"); 
} 
+0

这不是一个完整的答案,但请尝试使用日期时间的的TryParse方法,然后看所产生的各种属性DateTime实例。 – MNGwinn

回答

1

我会建议你使用输入日期时DateTimePicker控件和NumericUpDown控件进入YearMark,而不是使用文本框。

DateTimePicker控件允许您定义显示格式并限制某个范围的输入。如果我没有记错,Value属性的类型是DateTime,所以你不必解析一个字符串。

NumericUpDown控件允许您定义一系列允许的值。 Value属性是Decimal类型的,但是您可以安全地将其转换为Int32。这比解析字符串更安全。

0

还有就是ToString()功能的一个日期,其将过载允许你指定你想要的确切格式。

Date l_date = Date.Today(); 
l_date.ToString("dd/MM/yyyy"); 

有关可用格式的更多信息,请访问文档:
http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

解析stringint可以通过Int32.TryParse函数来完成,像这样:

string x = "32"; 
int y = -1; 
if (!x.TryParse(x, out y)){ 
    // The parse failed 
} 

然后你可以测试int的值来确定它是否在所需的范围内。

if (y > 0 && y <= 100){ 
    // Do something 
} 
0
  1. 你需要获得DateTime对象和当前日期之间的区别,这样你就可以创建一个TimeSpan对象并获取它的“年”属性。

    TimeSpan diff = new DateTime()。subtract(dateOfBirth);

    如果(diff.Years> 0 & & diff.Years < 100) 的isValid = TRUE;

  2. 要以任何所需格式显示DateTime对象,请使用格式化程序的ToString()方法。

    为了解决您的具体问题,试试这个:

    dateOfBirth.ToString( “DD/MM/YYYY”); //大写MM表示月份,而小写的MM表示分钟

0

你也可以做一个简单的方法来测试这下面是一个例子,以及

IsDate(txtYearMark.Text); 
    public static bool IsDate(string date) 
    { 
     DateTime Temp; 
     return(DateTime.TryParse(date, out Temp)&&date.Length>=10) 
    }