web-dev-qa-db-ja.com

2倍の差をミリ秒に変換しますか?

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

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

37
jay_t55
DateTime dt1 = DateTime.Parse(maskedTextBox1.Text);
DateTime dt2 = DateTime.Parse(maskedTextBox2.Text);
TimeSpan span = dt2 - dt1;
int ms = (int)span.TotalMilliseconds;
106
MusiGenesis

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

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の正確な機能が何であるかは明確ではありません。

14
Henk Holterman

テキストボックスの値を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);を使用します。エラー処理はあなた次第です。

6

上記のソリューションの多くは、さまざまな人々に適しています。
「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_を取得できます

4
Nashe
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;
1
DRBlaise

試してください:

DateTime first;
DateTime second;

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

以下を試してください:

   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
TLiebe

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

0
Jon Seigel
    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、デスクトップアプリケーション。ミリ秒単位の経過時間が必要な場合:

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