Как я могу вычесть два раза, которые вошли в два maskedtextbox и показать его в третьем maskedtextbox? - PullRequest
0 голосов
/ 09 января 2020

Я не могу преобразовать текст (в Maskedtextbox) в Datetime. Например, у меня есть эти времена в масках: 16:30, 6:30 Я хочу показать в третьей маске 10:00 ЗДЕСЬ мои коды: я пишу метод

У меня есть ошибка в строке: timespan t ошибка: входная строка была не в правильном формате : '); try {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";

Ответы [ 3 ]

1 голос
/ 09 января 2020

Вы на самом деле работаете с 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);
0 голосов
/ 11 февраля 2020

Я нахожу хороший способ:

publi c stati c long Time (строка t) {return (long.Parse (t.Substring (0,2)) * TimeSpan.TicksPerHour) + (long.Parse (t.Substring (3,2)) * TimeSpan.TicksPerMinute);

}

publi c void Вычислить (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";

    }
0 голосов
/ 09 января 2020

Вы можете попробовать следующие коды:

'' '

        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

' ''

...