秒表计算(将00:00转换为00:00 C#

问题描述 投票:0回答:2

我面临一个小问题,它是一个简单的秒表,但是我希望每次程序关闭时或单击停止时都保存最后的日期,以计算每次单击开始直到停止制造时间之类的时间。

例如:如果我单击今天开始5秒钟,然后关闭程序,我想保存5秒钟。

然后,当我重新打开程序时,它从零开始,但是总和为5秒。

  • 第二时间=第一次+第二次
  • 第二次= 05 + 000..

如果单击开始8秒钟,它将变成:

  • 第二次= 8 + 5 = 13

如果我关闭程序并重新打开它,然后单击开始7秒钟,则>]

  • 第二次= 7 + 13 = 20秒
  • 但是我一直都用(“ HH:mm:ss”)进行转换

变得那样

00:00:00 converts to 2/23/2020 12:00:00 AM.

我希望它转换为没有任何日期(月,年...)的00:00:00

因为求和时给我错误的数字。

System.Timers.Timer t;
int D, H, m, s;
CultureInfo enUS = new CultureInfo("en-US");
DateTime Drawing;
DateTime Rent;
long Machine_time;

public Form1()
{
        InitializeComponent();
        Rent = Properties.Settings.Default.Drawing_Time;
}

private void Start_Click(object sender, EventArgs e)
{
        t.Start();
}

private void Stop_Click(object sender, EventArgs e)
{
        t.Stop();

        try
        {
            // Drawing = DateTime.ParseExact(textBox1.Text, @"HH:mm:ss", CultureInfo.InvariantCulture);
            Drawing = DateTime.Parse(textBox1.Text);
          //  Drawing = DateTime.Now.ToString( @"HH:mm:ss");
            Console.WriteLine("{0} converts to {1}.", textBox1.Text, Drawing.ToString());
        }
        catch (FormatException)
        {
            Console.WriteLine("{0} is not in the correct format.", textBox1.Text);
        }

        Properties.Settings.Default.Drawing_Time = Drawing;

        long elapsedTicks = Drawing.Ticks ;
        Machine_time = elapsedTicks + Machine_time;
        TimeSpan elapsedSpan = new TimeSpan(Machine_time);
        MessageBox.Show(Drawing.ToString());

        string message = elapsedSpan.ToString();
        MessageBox.Show(message);

        saveSettings();
    }

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
       Properties.Settings.Default.Machine_Time = Machine_Time ;

        saveSettings();
        t.Stop();
        Application.DoEvents();
    }

    public void saveSettings()
    {
        try
        {
            Properties.Settings.Default.Save();
            MessageBox.Show("Saved Settings");
        }
        catch (Exception e)
        {
            MessageBox.Show("Save Settings: " + e);
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        t = new System.Timers.Timer();
        t.Interval = 1000;
        t.Elapsed += onTimeEvent;
    }

    private void onTimeEvent(object sender, System.Timers.ElapsedEventArgs e)
    {
        Invoke(new Action(() =>
        { 
            s += 1;

            if (s == 60)
            {
                s = 0;
                m += 1;
            }

            if (m == 60)
            {
                m = 0;
                H += 1;
            }

            if (H == 24)
            {
                H = 0;
                D += 1;
            }

            labelResult.Text = string.Format("{0}:{1}:{2}:{3}", D.ToString().PadLeft(2, '0'), H.ToString().PadLeft(2, '0'), m.ToString().PadLeft(2, '0'), s.ToString().PadLeft(2, '0'));
            textBox1.Text= string.Format("{0}:{1}:{2}",  H.ToString().PadLeft(2, '0'), m.ToString().PadLeft(2, '0'), s.ToString().PadLeft(2, '0'));
        }));
}

我面临一个小问题,它是一个简单的秒表,但是我希望每次程序关闭时或单击停止时都保存上一个日期,以计算每次单击开始直到停止为止的时间...

c# stopwatch
2个回答
0
投票

我看到您正在使用DateTime来保留“累计时间”或经过了多少时间。不要为此使用DateTime。顾名思义,DateTime是用于保留DATE和TIME部分,并且您认为“自5天前开始经过了多少时间?”您不会在“ 5月5日”回答此类问题。您需要一些与日历日期无关的东西。只是时间本身。


0
投票
看来,这是一个相当复杂的程序。仅使用日期时间会更简单:
© www.soinside.com 2019 - 2024. All rights reserved.