web-dev-qa-db-fra.com

Convertir la différence entre 2 fois en millisecondes?

J'ai deux contrôles TextBox masqués et je me demandais comment je pourrais obtenir l'heure dans chacun et ensuite convertir la différence en millisecondes. Par exemple, dans tb1, j'écris "12:01" et dans tb2, "12:02", puis cliquez sur un bouton. Une fois que le bouton est cliqué, une minuterie démarre et à 12:02 une boîte de message sera affichée. Je sais comment tout faire sauf pour la conversion de temps.

Comment peut-on y arriver?

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

Pour répondre à la question du titre:

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

int millisceonds = (int) diff.TotalMilliseconds;

Vous pouvez utiliser ceci pour régler une minuterie:

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

N'oubliez pas de désactiver le chronomètre lorsque vous manipulez la tique. 

Mais si vous voulez un événementà12:03, remplacez simplement DateTime.Now par d1.

Mais la fonction exacte de textBox1 et textBox2 n’est pas claire.

12
Henk Holterman

Vous devez convertir les valeurs de textbox en DateTime (t1, t2), puis:

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

Ou utilisez DateTime.TryParse (textbox1, out t1); Le traitement des erreurs est à vous.

6
Viktor Jevdokimov

Un grand nombre des solutions mentionnées ci-dessus peuvent convenir à différentes personnes.
Je voudrais suggérer un code légèrement modifié par rapport à la solution la plus acceptée par "MusiGenesis".

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

Considérations :
- earlierTime.Subtract(laterTime) vous obtiendrez une valeur négative.
- utilisez int milDiff = (int)DateTime.Now.Subtract(StartTime).TotalMilliseconds; si vous avez besoin d'une valeur entière au lieu de double
- Le même code peut être utilisé pour obtenir la différence entre deux valeurs Date et vous pouvez obtenir .TotalDays ou .TotalHours insteaf de .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;

Si vous traitez uniquement avec des heures et pas de dates, vous voudrez uniquement traiter avec TimeSpan et gérer le franchissement à minuit.

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

Essayer:

DateTime first;
DateTime second;

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

Essayez ce qui suit:

   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

Si vous souhaitez simplement afficher une boîte de message à 12h02, utilisez une commande de minuterie avec un retard de, disons, 250 ms, qui vérifie continuellement si l'heure actuelle est 12h02. Lorsque c'est le cas, affichez le message et arrêtez le chronomètre. Notez que cela n’exige pas de champ d’heure de début (bien que vous puissiez l’utiliser pour autre chose - je ne sais pas -, l’autre code fourni ici vous sera utile).

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
Erçin Dedeoğlu

VB.net, application de bureau. Si vous avez besoin de temps écoulé en millisecondes:

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