Restar días de una fecha y hora

142

Tengo el siguiente código en mi programa C #.

DateTime dateForButton =  DateTime.Now;  
dateForButton = dateForButton.AddDays(-1);  // ERROR: un-representable DateTime

Cada vez que lo ejecuto, aparece el siguiente error:

El valor agregado o sustraído da como resultado un DateTime no representable.
Nombre del parámetro: valor

Nunca he visto este mensaje de error antes, y no entiendo por qué lo estoy viendo. De las respuestas que Iv'e leyó hasta ahora, creo que puedo usar -1 en una operación de suma para restar días, pero como mi pregunta muestra, este no es el caso de lo que intento hacer.

Buena
fuente
Debería funcionar, ¿es esta el área problemática?
V4Vendetta
1
que tiene al trabajo, no ve ningún problema con esto ...
Tigran
12
Ese error generalmente ocurre cuando intenta restar un intervalo DateTime.MinValueo desea agregarle algo DateTime.MaxValue(o intenta crear una instancia de una fecha fuera de este intervalo mínimo-máximo). ¿Estás seguro de que no estás asignando a MinValuealguna parte?
CyberDude
1
CyberDude, tu comentario es de hecho Respuesta. ¿Cómo puedo votar su comentario y asignarlo como respuesta?
Buena
1
Publique el código entre las líneas 2 y 3 de su código
Panagiotis Kanavos

Respuestas:

70

Ese error generalmente ocurre cuando intenta restar un intervalo DateTime.MinValueo desea agregarle algo DateTime.MaxValue(o intenta crear una instancia de una fecha fuera de este intervalo mínimo-máximo). ¿Estás seguro de que no estás asignando a MinValuealguna parte?

CyberDude
fuente
287
DateTime dateForButton = DateTime.Now.AddDays(-1);
christiandev
fuente
14
Esta respuesta, responde el título del tema. Esto nunca debe ser rechazado. La mayoría de la gente viene de google. Si alguien no está de acuerdo con esta respuesta, debe ofrecer una edición del título del tema. ¬¬
MarceloBarbosa
A mí me funcionó incluso durante meses.
David Jones
48

Tu puedes hacer:

DateTime.Today.AddDays(-1)
sam
fuente
38

Puedes usar el siguiente código:

dateForButton = dateForButton.Subtract(TimeSpan.FromDays(1));
Rajesh Subramanian
fuente
44
Esto también fallará si la fecha es DateTime.MinValue. AddDays (-1) funciona igual de bien
Panagiotis Kanavos
7

El dateTime.AddDays(-1) no resta ese día de la dateTimereferencia. Devolverá una nueva instancia, con ese día restado de la referencia original.

DateTime dateTime = DateTime.Now;
DateTime otherDateTime = dateTime.AddDays(-1);
cahit beyaz
fuente
¿Le gustaría explicar cómo esto resolvería el problema del OP? Casi cualquiera puede escribir código, esa es la parte fácil. (Sin embargo, en este caso, en realidad, no veo cómo esto resolvería el problema de la OP en absoluto.)
fourpastmidnight
5

He tenido problemas al usar AddDays (-1) .

Mi solución es TimeSpan .

DateTime.Now - TimeSpan.FromDays(1);
Usuario no encontrado
fuente
¿Cuál fue su problema exacto?
Arash.Zandi
4

El objeto (es decir, la variable de destino) para el método AddDays no puede ser el mismo que el origen.

En vez de:

DateTime today = DateTime.Today;
today.AddDays(-7);

Intenta esto en su lugar:

DateTime today = DateTime.Today;
DateTime sevenDaysEarlier = today.AddDays(-7);
Mark Benson
fuente
1
Esta respuesta realmente no trae un nuevo punto si estamos mirando las otras respuestas existentes.
Isuka
1

En lugar de disminuir directamente el número de días desde el objeto de fecha directamente, primero obtenga el valor de la fecha y luego reste los días. Vea el siguiente ejemplo:

DateTime SevenDaysFromEndDate = someDate.Value.AddDays(-1);

Aquí, someDate es una variable de tipo DateTime.

Sambhav jain
fuente
0

Utilizando AddDays(-1) funcionó para mí hasta que traté de cruzar meses. Cuando intenté restar 2 días de 2017-01-01, el resultado fue 2016-00-30. No pudo manejar el cambio de mes correctamente (aunque el año parecía estar bien).

Solía date = Convert.ToDateTime(date).Subtract(TimeSpan.FromDays(2)).ToString("yyyy-mm-dd"); y no tengo problemas.

Ainsley Hobart
fuente