マスクされた2つのTextBoxコントロールがあり、それぞれのコントロールで時間を取得し、その差をミリ秒に変換する方法を考えていました。たとえば、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;
ティックを処理するときにタイマーを無効にすることを忘れないでください。
しかし、イベントが必要な場合at 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ではなく整数値が必要な場合はint milDiff = (int)DateTime.Now.Subtract(StartTime).TotalMilliseconds;
を使用します
-2つのDate値の差を取得するために同じコードを使用でき、_.TotalDays
_または_.TotalHours
_ insteaf of _.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のみを処理し、午前0時をまたぐ処理を行います。
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