2

タスクの時間を追跡する ASP.NET WinForms アプリケーションを作成したいと考えています。タスクをデータベースに追加し、新しいタブで開き、タスクを開始、一時停止、および停止できるように、フォームを作成できる必要があります。完了したら、タスクを完了するのにかかる時間を計算する必要があります。ページで実行されているストップウォッチを表示して、AJAX を介して毎秒更新される時間:分:秒を表示したいと思います。私は既に Web で TimeSpan、DateTime、StopWatch などを調べましたが、自分に合ったものが見つからないようです。スタート ボタンとストップ ボタンを備えた単純なフォームから始めました。開始ボタンの _click イベントは DateTime 変数 'startTime = DateTime.Now' を割り当て、停止ボタンの _click イベントは DateTime 変数 'endTime = DateTime.Now' を割り当てます。次に TimeSpan を使用します ' TimeSpan 'elapsed = (endTime - startTime) を計算します。ラベルを更新して経過時間を表示する場合、経過した秒数だけを取得することを期待していますが、DateTime 文字列全体を取得します。以下は私のコードです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;

namespace CS_StopWatch
{
    public partial class Default : System.Web.UI.Page
    {
        //public Stopwatch myStopWatch = new Stopwatch();
        public DateTime startTime;
        public DateTime endTime;
        public TimeSpan ts_timeElapsed;
        public string s_timeElapsed;
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void StartButton_Click(object sender, EventArgs e)
        {
            //myStopWatch.Start();
            startTime = DateTime.Now;
        }

        protected void StopButton_Click(object sender, EventArgs e)
        {
            //myStopWatch.Stop();
            //ElapsedLabel.Text = "Time Elapsed: " + myStopWatch.Elapsed;
            endTime = DateTime.Now;
            ts_timeElapsed = (endTime - startTime);
            s_timeElapsed = GetElapsedTimeString();
            ElapsedLabel.Text = "Time Elapsed: " + s_timeElapsed;
        }

        public string GetElapsedTimeString()
        {
            int days = ts_timeElapsed.Days;
            double hours = ts_timeElapsed.Hours;
            double mins = ts_timeElapsed.Minutes;
            double secs = ts_timeElapsed.Seconds;
            string x = "";
            if (days != 0)
            {
                x += days.ToString() + ":";
            }
            if (hours != 0)
            {
                x += hours.ToString() + ":";
            }
            if (mins != 0)
            {
                x += mins.ToString() + ":";
            }
            if (secs != 0)
            {
                x += secs.ToString();
            }

            return x;
        }
    }
}
4

1 に答える 1

2

これが問題の原因かどうかはわかりませんが、とにかくメンバーは, のint代わりに使用する必要があります。double を正確な数と比較すると、問題が発生する可能性がありますdoubleTimeSpanint

        int hours = ts_timeElapsed.Hours;
        int mins = ts_timeElapsed.Minutes;
        int secs = ts_timeElapsed.Seconds;
于 2011-07-05T19:17:28.137 に答える