47

マスクされたTextBoxコントロールが2つあり、それぞれの時間を取得して、その差をミリ秒に変換するにはどうすればよいか考えていました。たとえば、tb1では「12:01」と書き、tb2では「12:02」と書き、ボタンをクリックします。ボタンがクリックされるとタイマーが開始され、12:02にメッセージボックスが表示されます。時間変換の部分を除いて、すべてを行う方法を知っています。

どうすればそれを達成できますか?

4

11 に答える 11

121
DateTime dt1 = DateTime.Parse(maskedTextBox1.Text);
DateTime dt2 = DateTime.Parse(maskedTextBox2.Text);
TimeSpan span = dt2 - dt1;
int ms = (int)span.TotalMilliseconds;
于 2009-09-28T14:10:38.830 に答える
15

タイトルの質問に答えるには:

DateTime d1 = ...;
DateTime d2 = ...;
TimeSpan diff = d2 - d1;

int millisceonds = (int) diff.TotalMilliseconds;

これを使用してタイマーを設定できます。

timer1.interval = millisceonds;
timer1.Enabled = true;

ティックを処理するときは、タイマーを無効にすることを忘れないでください。

ただし、12:03にイベントが必要な場合、の代わりにDateTime.Nowを使用してd1ください。

しかし、textBox1とtextBox2の正確な機能が何であるかは明らかではありません。

于 2009-09-28T13:54:56.507 に答える
7

テキストボックスの値をDateTime(t1、t2)に変換してから、次のことを行う必要があります。

DateTime t1,t2;
t1 = DateTime.Parse(textbox1.Text);
t2 = DateTime.Parse(textbox2.Text);
int diff = ((TimeSpan)(t2 - t1)).TotalMilliseconds;

または、DateTime.TryParse(textbox1、out t1);を使用します。エラー処理はあなた次第です。

于 2009-09-28T13:55:24.617 に答える
5

上記のソリューションの多くは、さまざまな人々に適している可能性があります。
「MusiGenesis」で最も受け入れられているソリューションよりも少し変更されたコードを提案したいと思います。

DateTime firstTime = DateTime.Parse( TextBox1.Text );
DateTime secondTime = DateTime.Parse( TextBox2.Text );
double milDiff = secondTime.Subtract(firstTime).TotalMilliseconds;

考慮事項
-earlierTime.Subtract(laterTime)負の値を取得します。-doubleの代わりに整数値が必要な場合に
使用します-2つ のDate値の差を取得するために同じコードを使用でき、int milDiff = (int)DateTime.Now.Subtract(StartTime).TotalMilliseconds;
.TotalDays.TotalHours.TotalMilliseconds

于 2014-05-09T21:57:16.587 に答える
2
var firstTime = DateTime.Now;
var secondTime = DateTime.Now.AddMilliseconds(600);
var diff = secondTime.Subtract(firstTime).Milliseconds;


// var diff = DateTime.Now.AddMilliseconds(600).Subtract(DateTime.Now).Milliseconds;
于 2013-01-03T21:40:57.297 に答える
1

Timesのみを扱い、日付がない場合は、TimeSpanのみを扱い、深夜の乗換えを処理する必要があります。

TimeSpan time1 = ...;  // assume TimeOfDay
TimeSpan time2 = ...;  // assume TimeOfDay
TimeSpan diffTime = time2 - time1;
if (time2 < time1)  // crosses over midnight
    diffTime += TimeSpan.FromTicks(TimeSpan.TicksPerDay);
int totalMilliSeconds = (int)diffTime.TotalMilliseconds;
于 2009-09-28T14:21:07.347 に答える
0

試す:

DateTime first;
DateTime second;

int milliSeconds = (int)((TimeSpan)(second - first)).TotalMilliseconds;
于 2009-09-28T13:56:31.870 に答える
0

次のことを試してください。

   DateTime dtStart;
   DateTime dtEnd;

   if (DateTime.TryParse( tb1.Text, out dtStart ) && DateTime.TryParse(tb2.Text, out dtEnd ))
   {
      TimeSpan ts = dtStart - dtEnd;
      double difference = ts.TotalMilliseconds;
   }
于 2009-09-28T13:57:37.263 に答える
0

12:02にメッセージボックスを表示したいだけの場合は、たとえば250msの遅延のあるタイマーコントロールを使用して、現在の時刻が12:02かどうかをチェックし続けます。表示されたら、メッセージを表示してタイマーを停止します。これには開始時間フィールドは必要ないことに注意してください(ただし、他の目的で使用している可能性があります。その場合は、ここで提供されている他のコードが役立ちます)。

于 2009-09-28T14:09:11.860 に答える
0
    public static Int64 GetDifferencesBetweenTwoDate(DateTime newDate, DateTime oldDate, string type)
    {
        var span = newDate - oldDate;
        switch (type)
        {
            case "tt": return (int)span.Ticks;
            case "ms": return (int)span.TotalMilliseconds;
            case "ss": return (int)span.TotalSeconds;
            case "mm": return (int)span.TotalMinutes;
            case "hh": return (int)span.TotalHours;
            case "dd": return (int)span.TotalDays;
        }
        return 0;
    }
于 2014-09-05T09:37:23.497 に答える
0

VB.net、デスクトップアプリケーション。ミリ秒単位の経過時間が必要な場合:

Dim starts As Integer = My.Computer.Clock.TickCount
Dim ends As Integer = My.Computer.Clock.TickCount
Dim lapsed As Integer = ends - starts
于 2017-09-15T02:50:49.727 に答える