マスクされたTextBoxコントロールが2つあり、それぞれの時間を取得して、その差をミリ秒に変換するにはどうすればよいか考えていました。たとえば、tb1では「12:01」と書き、tb2では「12:02」と書き、ボタンをクリックします。ボタンがクリックされるとタイマーが開始され、12:02にメッセージボックスが表示されます。時間変換の部分を除いて、すべてを行う方法を知っています。
どうすればそれを達成できますか?
マスクされたTextBoxコントロールが2つあり、それぞれの時間を取得して、その差をミリ秒に変換するにはどうすればよいか考えていました。たとえば、tb1では「12:01」と書き、tb2では「12:02」と書き、ボタンをクリックします。ボタンがクリックされるとタイマーが開始され、12:02にメッセージボックスが表示されます。時間変換の部分を除いて、すべてを行う方法を知っています。
どうすればそれを達成できますか?
DateTime dt1 = DateTime.Parse(maskedTextBox1.Text);
DateTime dt2 = DateTime.Parse(maskedTextBox2.Text);
TimeSpan span = dt2 - dt1;
int ms = (int)span.TotalMilliseconds;
タイトルの質問に答えるには:
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の正確な機能が何であるかは明らかではありません。
テキストボックスの値を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);を使用します。エラー処理はあなた次第です。
上記のソリューションの多くは、さまざまな人々に適している可能性があります。
「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
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;
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;
試す:
DateTime first;
DateTime second;
int milliSeconds = (int)((TimeSpan)(second - first)).TotalMilliseconds;
次のことを試してください。
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;
}
12:02にメッセージボックスを表示したいだけの場合は、たとえば250msの遅延のあるタイマーコントロールを使用して、現在の時刻が12:02かどうかをチェックし続けます。表示されたら、メッセージを表示してタイマーを停止します。これには開始時間フィールドは必要ないことに注意してください(ただし、他の目的で使用している可能性があります。その場合は、ここで提供されている他のコードが役立ちます)。
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;
}
VB.net、デスクトップアプリケーション。ミリ秒単位の経過時間が必要な場合:
Dim starts As Integer = My.Computer.Clock.TickCount
Dim ends As Integer = My.Computer.Clock.TickCount
Dim lapsed As Integer = ends - starts