2009-09-28 22 views
31

Tengo dos controles TextBox enmascarados y me preguntaba cómo haría para obtener el tiempo en cada uno y luego convertir la diferencia en milisegundos. Como, digamos en tb1 escribo "12:01" y en tb2 escribo "12:02", y luego hago clic en un botón. Una vez que se presiona el botón, se inicia un temporizador y a las 12:02 se mostrará un cuadro de mensaje. Sé cómo hacer todo excepto la parte de conversión de tiempo.Convertir la diferencia entre 2 veces en milisegundos?

¿Cómo se puede lograr?

+1

Su pregunta no está clara. ¿No sabes cómo obtener la diferencia entre dos DateTime o cómo convertir "12:01" a DateTime? –

Respuesta

82
DateTime dt1 = DateTime.Parse(maskedTextBox1.Text); 
DateTime dt2 = DateTime.Parse(maskedTextBox2.Text); 
TimeSpan span = dt2 - dt1; 
int ms = (int)span.TotalMilliseconds; 
10

Para responder a la pregunta del título:

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

int millisceonds = (int) diff.TotalMilliseconds; 

Usted puede utilizar esto para establecer un temporizador:

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

No se olvide de desactivar el temporizador cuando el manejo de la garrapata.

Pero si quieres un evento en 12:03, simplemente sustituir DateTime.Now para d1.

Pero no está claro cuál es la función exacta de textBox1 y textBox2.

+1

Necesita utilizar Totalmilisegundos, no milisegundos. – MusiGenesis

+1

Necesita "Totalmilisegundos", no "Milisegundos" Los milisegundos solo le proporcionarán el "resto" de milisegundos de la diferencia de tiempo, no el intervalo de tiempo completo. 2.475 segundos da Millisegundos = 475, Totalmilisegundos = 2475 – StarPacker

+0

Sí, corregido. Interfaz Darn TimeSpan. –

5

usted tiene que convertir los valores del cuadro de texto a DateTime (t1, t2), entonces:

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

O utilice DateTime.TryParse (TextBox1, fuera t1); El manejo de errores depende de usted.

+0

Escribiendo desde la memoria del cerebro :))) –

+1

Tenía razón la primera vez: necesita utilizar TotalMilliseconds (a menos que desee devolver 0 cada vez). – MusiGenesis

0

Probar:

DateTime first; 
DateTime second; 

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

No hay necesidad de escribir a TimeSpan, y TotalMilliseconds es un doble. –

+0

El yeso no perjudica el rendimiento y aclara la intención. El molde del valor de retorno a int también tiene sentido, ya que tiene que ser fundido de todos modos para usarlo con el temporizador, como lo quiere el OP. Por cierto, el código está destinado a ser un ejemplo, así que si hay algo mal y vale la pena un voto negativo, por favor elabore. –

+0

No hay conversión del valor de retorno. La última línea no se compilará. –

0

Pruebe lo siguiente:

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

Si lo que desea es mostrar un cuadro de mensaje a las 12:02, utilizar un control temporizador con retardo de, digamos, 250 ms, que sigue comprobando si la hora actual es 12:02. Cuando lo es, muestre el mensaje y detenga el temporizador. Tenga en cuenta que esto no requiere un campo de hora de inicio (aunque puede que lo esté utilizando para otra cosa, no lo sé), en cuyo caso el otro código que se le proporcionó aquí será útil).

1

Si solo está lidiando con tiempos y sin fechas, querrá lidiar con TimeSpan y manejar el cruce hasta la medianoche.

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; 
0
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; 
+0

Tenga cuidado con esta respuesta. El uso de "Milisegundos" en lugar de "Múltiples minutos" arroja resultados diferentes, el primero solo da el componente de milisegundos del lapso de tiempo y el segundo da el tiempo total expresado en milisegundos. –

4

Muchas de las soluciones mencionadas anteriormente podrían suite de diferentes personas.
Me gustaría sugerir un código ligeramente modificado que la solución más aceptada por "MusiGenesis".

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

Consideraciones:
- earlierTime.Subtract(laterTime) obtendrá un valor negativo.
- int milDiff = (int)DateTime.Now.Subtract(StartTime).TotalMilliseconds; utilizar si necesita valor entero en lugar de doble
- Lo mismo código se puede utilizar para obtener la diferencia entre dos valores de fecha y usted puede conseguir .TotalDays o .TotalHours insteaf de .TotalMilliseconds

0
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, Aplicación de escritorio. Si necesita tiempo transcurrido en milisegundos:

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