【问题标题】:How can I subtract two time that entered in two maskedtextbox and show it into third maskedtextbox?如何减去在两个 maskedtextbox 中输入的两次时间并将其显示到第三个 maskedtextbox 中?
【发布时间】:2020-01-09 07:18:03
【问题描述】:

我无法将文本(Maskedtextbox)转换为Datetime。 例如,我有这些戴面具的时间:16:306:30 我想显示在第三个蒙面10:00 这是我的代码:我写了一个方法

我有一个错误:timespan t 错误是:输入字符串的格式不正确

Public void A (MaskedTextBox k, MaskedTextBox k1, MaskedTextBox k2, Label k3) { string[] houre = k.Text.Split(':'); 尝试 { int h = int.Parse (houre[0].ToString(); int m = int.Parse (houre[1].ToString();

            if (h > 23)
            {
                MessageBox.Show("wrong hour");
                k.Text = "00:" + houre[1].ToString();
            }
            if (m > 59)
            {
                MessageBox.Show("wrong minute");
                k.Text = houre[0].ToString() + ":00";
            }
            if (h > 23 && m > 59)

                k.Text = "00:00";
        }
        catch (Exception)
        {

        }
        string[] houre1 = k1.Text.Split(':');
        try
        {
            int h1 = int.Parse(houre1[0].ToString());
            int m1 = int.Parse(houre1[1].ToString());

            if (h1 > 23)
            {
                MessageBox.Show("wrong hour");
                k1.Text = "00:" + houre1[1].ToString();
            }
            if (m1 > 59)
            {
                MessageBox.Show("wrong minute");
                k1.Text = houre1[0].ToString() + ":00";
            }
            if (h1 > 23 && m1 > 59)

                k1.Text = "00:00";
        }
        catch (Exception)
        {

        }

        TimeSpan t = TimeSpan.ParseExact(k.Text.Trim(':'), "hh:mm",null );
        TimeSpan t1 = TimeSpan.ParseExact(k1.Text, "hh:mm", CultureInfo.InvariantCulture);
        k2.Text = (t1 - t).ToString("hh:mm", CultureInfo.InvariantCulture);


        if (k.Text != "" && k1.Text != "")
            k3.Text = "IN OUT Complete";
        else
         k3.Text = "IN OUT Noncomplete";

【问题讨论】:

  • 你能展示你的代码吗?
  • 尝试Timespan 而不是DateTime,假设两个时间都在同一天
  • 您是否总是想显示一个正数,或者一次被认为是“第一”而另一个应该被减去,即使它是一个更大的数字?

标签: c# timespan


【解决方案1】:

您实际上使用的是TimeSpan(不是DateTime);你应该Parse,做算术,最后将结果格式化为String

  TimeSpan left = TimeSpan.ParseExact(
    maskedBox1.Text.Trim(), "h\\:m", CultureInfo.InvariantCulture);

  TimeSpan right = TimeSpan.ParseExact(
    maskedBox2.Text.Trim(), "h\\:m", CultureInfo.InvariantCulture);

  myMaskedBox.Text = (left - right).ToString("hh\\:mm", CultureInfo.InvariantCulture);

【讨论】:

  • 亲爱的。时间(如 6:30)必须由人在 maskedtextboxes 中输入。我们不能在代码中写数字
  • @mohsenbahar:好吧,我们可以很容易地用SomeMaskedBox.Text 代替(演示)值
  • 输入字符串的格式不正确。' (在第一行(左))
  • @mohsenbahar:您在maskedBox 中输入的字符串是什么?你能放一个断点并检查maskedBox1.Text吗?您可能想要摆脱空格、填充等。
  • 我的 maskedtexbos 设置为欧洲时间(11:30)此框由用户填写
【解决方案2】:

您可以尝试以下代码:

'''

        var timeString1 = "16:30";
        var timeString2 = "6:30";

        //Make sure the parse input string match the HH:mm format
        timeString1 = timeString1.PadLeft(5, '0');
        timeString2 = timeString2.PadLeft(5, '0');

        var time1 = DateTime.ParseExact(timeString1, "HH:mm", null);
        var time2 = DateTime.ParseExact(timeString2, "HH:mm", null);
        var timeSpan12 = time1 - time2;

        var result = $"{timeSpan12.Hours:d2}:{timeSpan12.Minutes:d2}";
        Console.WriteLine(result);//10:30

'''

【讨论】:

    【解决方案3】:

    我找到了好方法:

    public static long Time(string t) { 返回 (long.Parse(t.Substring(0,2)) * TimeSpan.TicksPerHour)+ (long.Parse(t.Substring(3,2))*TimeSpan.TicksPerMinute);

    }

    public void Calculate(MaskedTextBox a,MaskedTextBox b,MaskedTextBox c) {

            if (Time(b.Text) > Time(a.Text))
            {
                long q;
                q = (Time(b.Text) - Time(a.Text)) / TimeSpan.TicksPerMinute;
                c.Text = TimeSpan.FromMinutes(q).ToString();
            }
            if (Time(b.Text) < Time(a.Text))
            {
                long q;
                q = ((Time(b.Text)+24*TimeSpan.TicksPerHour) - Time(a.Text)) / 
                     TimeSpan.TicksPerMinute;
                c.Text = TimeSpan.FromMinutes(q).ToString();
            }
            if (Time(b.Text) == Time(a.Text))
                c.Text = "00:00";
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多