Tengo dos objetos DateTime
: StartDate
y EndDate
. Quiero asegurarme de que StartDate
esté antes de EndDate
. ¿Cómo se hace esto en C#?Cómo comprobar si un DateTime es posterior a otro en C#
Respuesta
if (StartDate < EndDate)
// code
si lo que desea la fecha, y no el tiempo
if (StartDate.Date < EndDate.Date)
// code
if(StartDate < EndDate)
{}
DateTime admite operadores de comparación normales.
if(dateTimeA > dateTimeB) Console.WriteLine("Do your own homework");
Salida método DateTime.Compare
StartDate < EndDate
Puede utilizar los sobrecargados o <> operadores .
Por ejemplo:
DateTime d1 = new DateTime(2008, 1, 1);
DateTime d2 = new DateTime(2008, 1, 2);
if (d1 < d2) { ...
Guau, excavación de tumbas extremas. – recursive
Mucho más fuerte ahora :) –
if (StartDate>=EndDate)
{
throw new InvalidOperationException("Ack! StartDate is not before EndDate!");
}
if (new DateTime(5000) > new DateTime(1000))
{
Console.WriteLine("i win");
}
que tenían el mismo requisito, pero cuando se utiliza la respuesta aceptada, que no cumplía con todas mis pruebas unitarias. El problema para mí es cuando tienes un objeto nuevo, con fechas de inicio y finalización y tienes que establecer la fecha de inicio (en esta etapa tu fecha de finalización tiene el valor de fecha mínimo 01/01/0001) - esta solución pasó todo mis pruebas de unidad:
public DateTime Start
{
get { return _start; }
set
{
if (_end.Equals(DateTime.MinValue))
{
_start = value;
}
else if (value.Date < _end.Date)
{
_start = value;
}
else
{
throw new ArgumentException("Start date must be before the End date.");
}
}
}
public DateTime End
{
get { return _end; }
set
{
if (_start.Equals(DateTime.MinValue))
{
_end = value;
}
else if (value.Date > _start.Date)
{
_end = value;
}
else
{
throw new ArgumentException("End date must be after the Start date.");
}
}
}
lo hace se pierda el caso extremo en que tanto las fechas de inicio y pueden ser 01/01/0001, pero no estoy preocupado por eso.
Ésta es probablemente demasiado tarde, pero en beneficio de otras personas que podrían tropezar con esto, he utilizado un método de extensión hacer para esto utilizando IComparable
así:
public static class BetweenExtension
{
public static bool IsBetween<T>(this T value, T min, T max) where T : IComparable
{
return (min.CompareTo(value) <= 0) && (value.CompareTo(max) <= 0);
}
}
El uso de este método de extensión con IComparable
hace que este método más genérico y lo hace utilizable con una amplia variedad de tipos de datos y no solo fechas.
Se podría utilizar de esta manera:
DateTime start = new DateTime(2015,1,1);
DateTime end = new DateTime(2015,12,31);
DateTime now = new DateTime(2015,8,20);
if(now.IsBetween(start, end))
{
//Your code here
}
me gustaría demostrar que si convierte a .Date que no es necesario preocuparse por las horas/minutos/segundos, etc:
[Test]
public void ConvertToDateWillHaveTwoDatesEqual()
{
DateTime d1 = new DateTime(2008, 1, 1);
DateTime d2 = new DateTime(2008, 1, 2);
Assert.IsTrue(d1 < d2);
DateTime d3 = new DateTime(2008, 1, 1,7,0,0);
DateTime d4 = new DateTime(2008, 1, 1,10,0,0);
Assert.IsTrue(d3 < d4);
Assert.IsFalse(d3.Date < d4.Date);
}
- 1. ¿Cómo comprobar si un vector es un subconjunto de otro?
- 2. Comprobar si un constructor llama a otro constructor
- 3. ¿Cómo comprobar si un tipo es una cadena en C#?
- 4. Cómo comprobar si un objeto es serializable en C#
- 5. ¿Cómo comprobar si un doble es nulo?
- 6. ¿Cómo comprobar si un puntero es válido?
- 7. ¿Cómo comprobar si un camino determinado es posible hijo de otro camino?
- 8. C# - cómo comprobar si un proceso se inició con éxito
- 9. ¿Cómo verificar si un objeto es convertible a otro tipo?
- 10. C++ comprobar si una fecha es válida
- 11. ¿Cómo comparar DateTime en C#?
- 12. ¿Cómo comprobar si un tipo es un typedef int
- 13. Objective-C cómo comprobar si una cadena es nula
- 14. Cómo comprobar si el GUID es cero
- 15. ¿Cómo puedo comprobar si existe un objeto en C++
- 16. ¿Cómo comprobar si un objeto es iterable en Python?
- 17. ¿Cómo comprobar si un control es hijo de otro control? "Control.IsChildOf"
- 18. Comprobar si boolean es verdadero
- 19. Comprobar si es falso
- 20. ¿Cómo comprobar si es sábado/domingo?
- 21. Comprobar si un archivo es una imagen
- 22. ¿Cómo comprobar si un método es estático en PHP?
- 23. ¿Cómo comprobar si un objeto es iterable en Ruby?
- 24. cómo agregar un DateTimeOffset a un DateTime en C#?
- 25. Comprobar si es IP en la subred
- 26. Comprobar si un objeto es NSInteger
- 27. KVO - ¿Cómo comprobar si un objeto es un observador?
- 28. C# comprobar si un directorio está oculto?
- 29. comprobar si un solo carácter es un espacio en blanco?
- 30. ¿Cómo comprobar si una interfaz se extiende otra en C#?
¿Las respuestas no se muestran de inmediato? Porque actualicé la página para asegurarme de que nadie más había respondido. Pero después de poner mi respuesta, bam 7 otros. –
@toast, creo que ocho personas respondieron aproximadamente al mismo tiempo. –