2010-03-12 16 views
24

Duplicar posibles:
How can I specify the latest time of day with DateTimea 23:59:59

que necesita comparar un intervalo de fechas y AM filas desaparecidos que la fecha es la fecha de comparación superior, pero el tiempo es más alto que la medianoche ¿Hay alguna manera de establecer el tiempo de comparación superior a 23:59:59?

+1

¿Está recibiendo las fechas de SQL u otra base de datos? (Usted mencionó las filas). Puede haber una precisión específica involucrada que debe compensar. – StingyJack

Respuesta

38

Ésta es una solución posible:

yourDateTime.Date.AddHours(23).AddMinutes(59).AddSeconds(59); 
+0

Esto funcionó. ¡Gracias! –

+23

Solo espero que no haya nada con un tiempo de 23: 59: 59.500. –

+0

Datos ingresados ​​entre las 7:00 a.m. y las 4:00 p.m. Lo único que podría ser un problema no pasa un tiempo en esta base de datos con la que estoy trabajando. Estoy seguro de que estaré bien. Definitivamente algo por lo que otros busquen una solución similar debería preocuparse. –

1

Solo use un día más tarde que la comparación superior, y < en la parte superior en lugar de <=. De esta forma, puede obtener tiempos que son incluso más tardíos (fracción de segundo) que los que ha especificado.

Como alternativa, compare el uso de la propiedad DateTime.Date en lugar del DateTime directamente. Esto "quitará" la porción de tiempo, por lo que sus fechas en la búsqueda se tratarán automáticamente como la medianoche.

35

Por qué no tienen la comparación superior que es la medianoche del día después el último que le interesa, y luego utilizar estos fondos con una comparación exclusiva? 59:: -

DateTime upperExclusive = lastInclusive.Date.AddDays(1); 
if (dateInclusive >= date && date < upperExclusive) 
{ 
    .... 
} 

Esto se siente como una solución más limpia que encontrar el último segundo del día, aparte de cualquier otra cosa, que todavía estaría valores de 23 echa en falta 59.500 etc con su esquema actual.

Obligatory plug: No soy un gran admirador de la API de fecha/hora de BCL. Es posible que desee mantener las pestañas en Noda Time - un puerto de Joda Time a .NET.

+2

También podría hacer lastInclusive.Date.AddDays (1) .AddTicks (-1) que haría te da 23: 59: 59.999999 :) –

+0

@ AdamMarshall: Podrías, sí. Pero los límites superiores exclusivos son generalmente más nítidos. –

4

Si está haciendo una comparación ¿por qué no se compara con menos que el comienzo del día siguiente?

Por ejemplo. si se trataba de una consulta LINQ:

someList.Where(x => (currentDaysDate <= x.ItemDate) && (x.ItemDate < nextDaysDate)) 
0

Si no está preocupado por el tiempo en absoluto, se puede utilizar la propiedad de DateDateTime, que devuelve sólo la parte de fecha (con el tiempo ajustado a las 00:00: 0000)

if(MyDate.Date >= StartDate.Date && MyDate.Date <= EndDate.Date) 
{ 
    //Code here 
} 
3

Crear un método de extensión EndOfDay

public static DateTime EndOfDay (this DateTime d) 
    { 
     return DateTime.Parse(d.ToShortDateString().Trim() + " 23:59:59"); 
    } 
+4

El comportamiento de DateTime.Parse() y ToShortDateString() depende de la configuración regional actual del sistema. Su código fallará en algunas configuraciones regionales que no sean en inglés. – Daniel

Cuestiones relacionadas