2009-09-28 8 views
31

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

どのように達成できますか?

+1

質問が不明です。あなたは2つのDateTimeの違いや "12:01"のDateTimeへの変換方法を知りませんか? –

答えて

82
DateTime dt1 = DateTime.Parse(maskedTextBox1.Text); 
DateTime dt2 = DateTime.Parse(maskedTextBox2.Text); 
TimeSpan span = dt2 - dt1; 
int ms = (int)span.TotalMilliseconds; 
10

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

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

int millisceonds = (int) diff.TotalMilliseconds; 

をあなたはタイマーを設定するためにこれを使用することができます。

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

はダニを処理する際にタイマーを無効にすることを忘れないでください。

しかし、あなたは 12:03にイベントをしたい場合は、ちょうどd1のためDateTime.Nowを代用。

しかし、textBox1とtextBox2の正確な機能が何であるかは不明です。

+1

ミリ秒ではなく、TotalMillisecondsを使用する必要があります。 – MusiGenesis

+1

"Milliseconds"ではなく "TotalMilliseconds"が必要です ミリ秒では、時間の全範囲ではなく、時間差の「剰余」のミリ秒しか得られません。 2.475秒でミリ秒= 475、TotalMilliseconds = 2475 – StarPacker

+0

はい、修正されました。 Darn TimeSpanインターフェイス。 –

5

あなたは、その後、(T1、T2)のDateTimeにテキストボックスの値を変換する必要があります。

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

それともDateTime.TryParse(T1アウトのTextBox1を、)を使用します。 エラー処理はあなた次第です。

+0

脳の記憶からの書き込み:)) –

+1

初めての方には:TotalMillisecondsを使用する必要があります(毎回0を返すのが好きでない限り)。 – MusiGenesis

0

試してみてください。

DateTime first; 
DateTime second; 

int milliSeconds = (int)((TimeSpan)(second - first)).TotalMilliseconds; 
+0

TimeSpanに型キャストする必要はなく、TotalMillisecondsは2倍です。 –

+0

キャストはパフォーマンスを傷つけず、意図をより明確にします。戻り値のintへのキャストも意味があります。なぜなら、OPが望んでいるように、タイマーでそれを使用するには、キャストする必要があるからです。ところで、コードは例として意味されているので、何か間違っていて投票の価値がある場合は、詳しく説明してください。 –

+0

戻り値のキャストはありません。最後の行はコンパイルされません。 –

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; 
    } 
0

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

1

タイムズと日付を扱っていない場合は、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; 
0
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; 
+0

この回答には注意してください。 'TotalMilliseconds'の代わりに 'Milliseconds'を使用すると、異なる結果が得られます。前者は時間軸のミリ秒単位を与え、後者はミリ秒単位で表される合計時間を与えます。 –

4

上記のソリューションの多くは、別の人を、スイートかもしれません。
私は「MusiGenesis」によって最も受け入れられている解決策より少し修正されたコードを提案したいと思います。

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

考慮事項
- earlierTime.Subtract(laterTime)あなたは負の値を取得します。
- 、同じコードが2つのDate値の差を取得するために使用することができ、あなたが.TotalMilliseconds

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; 
    } 
0

VB.netのinsteaf .TotalDaysまたは.TotalHoursを得ることができます - あなたは、整数値の代わりに、二重の
が必要な場合int milDiff = (int)DateTime.Now.Subtract(StartTime).TotalMilliseconds;を使用デスクトップアプリケーション。経過時間がミリ秒で必要な場合:

Dim starts As Integer = My.Computer.Clock.TickCount 
Dim ends As Integer = My.Computer.Clock.TickCount 
Dim lapsed As Integer = ends - starts