【问题标题】:Parsing and validating numeric and DateTime input解析和验证数字和日期时间输入
【发布时间】:2012-10-18 21:18:07
【问题描述】:

所以我正在制作一个带有单独班级的窗口表格,用于学生详细信息和国际学生。我需要验证我的学生/国际学生的年级分数是否大于 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");
} 

【问题讨论】:

  • 这不是一个完整的答案,但请尝试在 DateTime 上使用 TryParse 方法,然后查看生成的 DateTime 实例的各种属性。

标签: c# validation parsing datetime


【解决方案1】:

我建议您使用 DateTimePicker 控件输入日期和 NumericUpDown 控件输入 YearMark,而不是使用 TextBox。

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

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

【讨论】:

    【解决方案2】:

    ToString() 函数重载了一个日期,它允许您指定所需的确切格式。

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

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

    string 解析为int 可以通过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
    }
    

    【讨论】:

      【解决方案3】:
      1. 您需要获取 DateTime 对象和当前日期之间的差异,因此您可以创建一个 TimeSpan 对象并获取它的 'Years' 属性。

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

        if(diff.Years > 0 && diff.Years

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

        要解决您的确切问题,请尝试以下操作:

        dateOfBirth.ToString("dd/MM/yyyy"); //大写MM表示月份,小写MM表示分钟

      【讨论】:

        【解决方案4】:

        你也可以做一个简单的方法来测试这里也是一个例子

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多