繁体   English   中英

日期确认酒店预订

[英]date validation hotel reservation

您好,iam撰写了一份酒店预订表格,并希望计算住宿之夜的总费用。 它需要到达日期和离开日期,但我想添加一个验证,因此,如果用户输入的格式不正确,则会显示一个消息框,要求他们重试。 这是我的代码在转换时间跨度方面已经有一些帮助,因此再次提供任何帮助都将是惊人的。 错误出现在以“ dateDiff = aDate”开头的行上,并表示未分配变量aDate和dDate,谢谢:

        String arrival, departure;
        arrival = textBox1.Text;
        departure = textBox2.Text;

        DateTime aDate, dDate;

        try
        {
            aDate = DateTime.ParseExact(arrival, "dd/mm/yyyy", null);
            dDate = DateTime.ParseExact(departure, "dd/mm/yyyy", null);
            return;
        }
        catch
        {
            MessageBox.Show("Invalid input format please enter in format DD/MM/YYYY");
        }

        TimeSpan dateDiff;
        dateDiff = dDate.Subtract(aDate);
        int nights = (int)dateDiff.TotalDays;

        textBox3.Text = ("" + nights);
        textBox5.Text = ("£" + (nights * 115));

产生编译器警告的原因是您尚未为本地DateTime字段分配值。 局部变量未使用默认值初始化,因此必须先手动进行操作,然后才能使用它们。 由于您是在“ Try/Catch分配值的,因此无法确保他们将获得该值。

相反,您可以使用DateTime.TryParseExact

DateTime aDate, dDate;
if( DateTime.TryParseExact(arrival, "dd/mm/yyyy", null, DateTimeStyles.None, out aDate)
 && DateTime.TryParseExact(departure, "dd/mm/yyyy", null, DateTimeStyles.None, out dDate))
{
    // ...
}
else{
    MessageBox.Show("Invalid input format please enter in format DD/MM/YYYY");
}

您的代码将在捕获后继续。 使用日期将代码放入尝试块中。

        String arrival, departure;
        arrival = textBox1.Text;
        departure = textBox2.Text;

        DateTime aDate, dDate;

        try
        {
            aDate = DateTime.ParseExact(arrival, "dd/mm/yyyy", null);
            dDate = DateTime.ParseExact(departure, "dd/mm/yyyy", null);

            TimeSpan dateDiff;
            dateDiff = dDate.Subtract(aDate);
            int nights = (int)dateDiff.TotalDays;

            textBox3.Text = ("" + nights);
            textBox5.Text = ("£" + (nights * 115));
        }
        catch
        {
            MessageBox.Show("Invalid input format please enter in format DD/MM/YYYY");
        }

不要返回,如果他们成功的解析,或者当您输入的内容验证你不会有任何结果。

或者,将返回值放在catch块中,以便在失败时停止执行。

您的代码应为

    String arrival, departure;
    arrival = textBox1.Text;
    departure = textBox2.Text;

    DateTime aDate, dDate;

    try
    {
        aDate = DateTime.ParseExact(arrival, "dd/mm/yyyy", null);
        dDate = DateTime.ParseExact(departure, "dd/mm/yyyy", null);

        TimeSpan dateDiff;
        dateDiff = dDate.Subtract(aDate);
        int nights = (int)dateDiff.TotalDays;

        textBox3.Text = ("" + nights);
        textBox5.Text = ("£" + (nights * 115));

    }
    catch
    {
        MessageBox.Show("Invalid input format please enter in format DD/MM/YYYY");
        return;
    }

aDatedDate分配一些默认值,错误将消失。 原因是编译器无法确定是否在try块中确定是否为其分配了值。 你可以做

DateTime aDate = default(DateTime);
DateTime dDate = default(DateTime);

而不是使用try-catch来验证日期,如果使用DateTime.TryParseExact会更好

DateTime aDate, dDate;


if (DateTime.TryParseExact(arrival, 
                           "dd/MM/yyyy", 
                            CultureInfo.InvariantCulture,
                            DateTimeStyles.NoCurrentDateDefault, 
                            out aDate))
{
    MessageBox.Show("Invalid input format please enter in format DD/MM/YYYY");
}

因此,您的完整代码应为:

String arrival, departure;
arrival = textBox1.Text;
departure = textBox2.Text;

DateTime aDate, dDate;


if (DateTime.TryParseExact(arrival, 
                            "dd/MM/yyyy", 
                            CultureInfo.InvariantCulture, 
                            DateTimeStyles.NoCurrentDateDefault, 
                            out aDate))
{
    MessageBox.Show("Invalid input format for Arrival Date - please enter in format DD/MM/YYYY");
}
if (DateTime.TryParseExact(departure, 
                            "dd/MM/yyyy", 
                            CultureInfo.InvariantCulture, 
                            DateTimeStyles.NoCurrentDateDefault, 
                            out dDate))
{
    MessageBox.Show("Invalid input format for Departure Date - please enter in format DD/MM/YYYY");
}


TimeSpan dateDiff;
dateDiff = dDate.Subtract(aDate);
int nights = (int)dateDiff.TotalDays;

textBox3.Text = ("" + nights);
textBox5.Text = ("£" + (nights * 115));

使用dateTimePicker控件,您无需解析

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM