【问题标题】:Adding Int to DateTime in format DD/MM/YYYY以 DD/MM/YYYY 格式将 Int 添加到 DateTime
【发布时间】:2013-09-14 08:20:07
【问题描述】:

我得到了 maskedTextBox1,其中我得到了格式日期和掩码 DD/MM/YYYY,在 textBox2 中得到了 int 值。

现在我需要将 int 数字添加到 maskedTextBox1 值并将其显示在下一个 maskedtextbox2 中。 int 值应添加到天数中,例如:20/09/2013 + 8 = 28/09/2013

请问怎么做?

我试过了:

string date1 = maskedTextBox2.Text;
string nodays = zpocdnu.Text;

maskedTextBox1.Text = date1 + nodays;

但由于我在 c# 中的时间不长,我不确定我应该选择哪种转换。

感谢您提前提供帮助。

编辑 - 这就是答案 - 感谢 Rajesh Subramanian:

        private void zpocdnu_TextChanged(object sender, EventArgs e)
    {
        DateTime rs;

        CultureInfo ci = new CultureInfo("en-IE");

        if (DateTime.TryParseExact(this.maskedTextBox2.Text, "dd/MM/yyyy", ci, DateTimeStyles.None, out rs) && zpocdnu.TextLength > 0)
        {


            DateTime today = DateTime.Parse(maskedTextBox2.Text);
            DateTime answer = today.AddDays(Convert.ToInt32(zpocdnu.Text) - 1);


            maskedTextBox1.Text = answer.ToString();

        }


    }

【问题讨论】:

  • DateTime.ToAddDays()

标签: c# winforms date


【解决方案1】:

可以将 datetimepicker 配置为仅接受 atetime 值的文本框,而不是屏蔽文本框。因为结果值已经是一个日期时间值,并且您将其放入另一个日期时间选择器,所以不需要转换。

【讨论】:

    【解决方案2】:

    而不是Convert.ToInt32(),使用TryParse() 会更好,就像MSDN 上所说的那样:

    使用 ToInt32(String) 方法相当于将值传递给 Int32.Parse(String) 方法。 value 是通过使用当前线程区域性的格式约定来解释的。 如果您不想在转换失败时处理异常,则可以调用 Int32.TryParse 方法。它返回一个布尔值,指示转换是成功还是失败。

    您将制作如下扩展方法:

     public static class StringExtensions
     {
          public static int ToInt(this string str)
          {
                int n;
                if(Int32.TryParse(str, out n))
                   return n;
                else
                   return 0;
          }
    }
    

    在此之后,您将在 Rajesh 的回答中使用它,如下所示:

    DateTime today = DateTime.Parse(maskedTextBox1.Text);
    DateTime answer = today.AddDays(zpocdnu.Text.ToInt());
    
    maskedTextBox2.Text = answer.ToString() ;
    

    【讨论】:

      【解决方案3】:

      错误的用户输入不会引发异常的解决方案是:

          DateTime dt;
          int days = 0;
          bool success = Int32.TryParse(maskedTextBox2.Text, out days);
          success |= DateTime.TryParse(zpocdnu.Text, out dt);
          if (success)
              maskedTextBox2.Text = dt.AddDays(days).ToString();
      

      【讨论】:

        【解决方案4】:

        首先您需要将string 转换为datetime,然后添加日期,然后在文本框中显示: 示例:

        string date1= "09/10/2013";
        string ndays = "5";
        DateTime dt = Convert.ToDateTime(date1);
        dt.AddDays(int.Parse(ndays));
        string result = dt.ToShortDateString();
        

        【讨论】:

          【解决方案5】:

          您可以执行以下操作,

          DateTime today = DateTime.Parse(maskedTextBox1.Text);
          DateTime answer = today.AddDays(Convert.ToInt32(zpocdnu.Text));
          
          maskedTextBox2.Text = answer.ToString() ;
          

          【讨论】:

          • 非常感谢,请问如果 maskedTextBox2 包含一些值,我该如何防止?我试过: maskedTextBox2.TextLength > 0 但因为它是掩码,它已经包含 10 个字符。现在我需要一些条件,这样程序就不会失败。再次感谢
          • 你可以使用 DateTime.TryParse() 代替,它会告诉你它是否有效
          猜你喜欢
          • 2016-01-02
          • 1970-01-01
          • 1970-01-01
          • 2017-05-30
          • 1970-01-01
          • 2013-08-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多