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?
DateTime dt1 = DateTime.Parse(maskedTextBox1.Text);
DateTime dt2 = DateTime.Parse(maskedTextBox2.Text);
TimeSpan span = dt2 - dt1;
int ms = (int)span.TotalMilliseconds;
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.
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.
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
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;
Essayer:
DateTime first;
DateTime second;
int milliSeconds = (int)((TimeSpan)(second - first)).TotalMilliseconds;
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;
}
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).
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, 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