• Viernes 29 de Marzo de 2024, 08:21

Autor Tema:  comparar fechas, horas.... en C#  (Leído 13200 veces)

skan

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
comparar fechas, horas.... en C#
« en: Viernes 14 de Noviembre de 2008, 14:47 »
0
Buenas
Estoy empezando con el C#.
Y estaba comprobando como utililzar algunos métodos para comparar horas....
Quisiera hacer algo así:

Console.WriteLine(DateTime.Compare(DateTime.Now.TimeOfDay,15:30));

pero ese 15:30 da error,  ¿Cómo ser lo pongo?

(eso sólo era un ejemplo muy simple para ver que resultado da)

He intentado buscar ejemplos de manipulación de ese tipo de datos pero no encuentro

Gracias

E.Baley

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Re: comparar fechas, horas.... en C#
« Respuesta #1 en: Viernes 14 de Noviembre de 2008, 18:53 »
0
Estás comparando dos cosas diferentes:
- un objeto TimeSpan, en el primer término de la comparación, que es < DateTime.Now.TimeOfDay >
- un objeto nosequé, en el segundo término, que viene dado por < 15:30 > , cosa que no entiende el método "Compare"

Vayamos por partes. Parece que quieres comparar dos horas diferentes.
Puedes hacer dos cosas:

1- Usando el método "Compare" de DateTime.
Como debes comparar dos DateTimes, debes construir el segundo a partir de la Hora. Los dos DateTimes deben ser del mismo día, pues no tiene sentido comparar una hora de un día y otra de otro día. Ej:
Código: Text
  1. DateTime DT_ahora = DateTime.Now;
  2. DateTime DT_TresyMedia = new DateTime(DT_ahora.Year, DT_Ahora.Month, DT_Ahora.Day, 15, 30, 0);
  3. Console.WriteLine(DateTime.Compare(DT_ahora, DT_TresyMedia));
  4.  
Verás que para construir el segundo (con año, mes, dia, hora, min, seg) he usado la fecha de hoy.

2- Usando el método "Compare" de TimeSpan, que acepta como entrada dos TimeSpan diferentes, sin fecha.
Código: Text
  1. TimeSpan TS1 = DateTime.Now.TimeOfDay;   // Esto devuelve un TimeSpan
  2. TimeSpan TS2 = new TimeSpan(15, 30, 0);
  3. Console.WriteLine(TimeSpan.Compare(TS1, TS2));
  4.  

saludos

skan

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: comparar fechas, horas.... en C#
« Respuesta #2 en: Lunes 17 de Noviembre de 2008, 13:50 »
0
Muchas gracias
Lo que necesitaba era precisamente algún ejemplo concreto y aclaratorio. Puesto que sólo quiero comparar horas usaré el método del TimeSpan

skan

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: comparar fechas, horas.... en C#
« Respuesta #3 en: Lunes 17 de Noviembre de 2008, 14:05 »
0
Lo que se me hace raro es que TimeSpan no se usa para horas concretas sino para intervalos de tiempo.

skan

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: comparar fechas, horas.... en C#
« Respuesta #4 en: Lunes 17 de Noviembre de 2008, 18:36 »
0
La cosa es que todo esto lo hago dentro un programa que realiza cálculos matemáticos, por ejemplo sobre series temporales y que internamente usa C# y librerias propias pero su documentación es muy básica, se remiten a que investigues por tu cuenta en la de .NET

Por ejemplo para mostrar la hora de una barra de datos  se pone   bar.DateTime.TimeOfDay
pero no sé como ver la del dato anterior,   bar.Ago(1).DateTime.TimeOfDay   bar.DateTime.Ago(1).TimeOfDay  dan error

E.Baley

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Re: comparar fechas, horas.... en C#
« Respuesta #5 en: Lunes 17 de Noviembre de 2008, 20:42 »
0
Con esos datos poco se puede hacer
habría que mirar en la documentación de ese programa cómo se obtiene cada objeto barra (bar), para luego obtener el DateTime de esa barra, una vez obtenida.
Lo usual sería tener un objeto que contiene todas las barras, y obtener la barra en cuestión mediante un método al uso.

Por ejemplo, supongamos que es una colección de barras (que llamaremos Serie), lo usual sería hacer algo así como:
bar laBarra = Serie[indice]; // donde indice es eso, la posición de esa barra.
TimeSpan horaDeLaBarra = laBarra.DateTime.TimeOfDay;

Otro ejemplo estándar sería esta posibilidad:
bar laBarra = Serie.Ago(10) // El método Ago(i) se aplica sobre la colección de barras, (no sobre una barra en concreto) y devuelve la barra de n periodos anterior.
etc ...

Pero ya te digo, sin saber a qué programa te refieres y sin saber su API, poco podemos aportar desde aquí
Saludos