Subtrair dias de um DateTime


142

Eu tenho o seguinte código no meu programa c #.

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

Sempre que o executo, recebo o seguinte erro:

O valor adicionado ou subtraído resulta em um DateTime não representável.
Nome do parâmetro: value

Nunca vi essa mensagem de erro antes e não entendo por que a estou vendo. Pelas respostas que Iv'e leu até agora, sou levado a acreditar que posso usar -1 em uma operação de adição para subtrair dias, mas como minha pergunta mostra, esse não é o caso do que estou tentando fazer.


Deve funcionar, essa é a área do problema?
V4Vendetta

1
ele tem para trabalhar, não vejo nenhum problema com isso ...
Tigran

12
Esse erro geralmente ocorre quando você tenta subtrair um intervalo de DateTime.MinValueou deseja adicionar algo a DateTime.MaxValue(ou tenta instanciar uma data fora desse intervalo min-max). Tem certeza de que não está atribuindo MinValuealgum lugar?
CyberDude

1
CyberDude, seu comentário é de fato Resposta. Como posso votar no seu comentário e atribuí-lo como resposta?
Buena

1
Por favor, poste o código entre as linhas 2 e 3 do seu código
Panagiotis Kanavos

Respostas:


70

Esse erro geralmente ocorre quando você tenta subtrair um intervalo de DateTime.MinValueou deseja adicionar algo a DateTime.MaxValue(ou tenta instanciar uma data fora desse intervalo min-max). Tem certeza de que não está atribuindo MinValuealgum lugar?


287
DateTime dateForButton = DateTime.Now.AddDays(-1);

14
Esta resposta, responda o título do tópico. Isso nunca deve ser eliminado. A maioria das pessoas vem aqui do google. Se alguém não concordar com esta resposta, deve oferecer uma edição no título do tópico. ¬¬
MarceloBarbosa

Trabalhou para mim mesmo durante meses.
David Jones

48

Você pode fazer:

DateTime.Today.AddDays(-1)

38

Você pode usar o seguinte código:

dateForButton = dateForButton.Subtract(TimeSpan.FromDays(1));

4
Isso também falhará se a data for DateTime.MinValue. AddDays (-1) funciona tão bem
Panagiotis Kanavos

7

O dateTime.AddDays(-1) não subtrai esse dia da dateTimereferência. Ele retornará uma nova instância, com isso um dia subtraído da referência original.

DateTime dateTime = DateTime.Now;
DateTime otherDateTime = dateTime.AddDays(-1);

Gostaria de explicar como isso resolveria o problema do OP? Quase todo mundo pode escrever código, essa é a parte mais fácil. (No entanto, neste caso, eu realmente não vejo como isso resolveria o problema do OP em tudo.)
fourpastmidnight


4

O objeto (ou seja, variável de destino) para o método AddDays não pode ser o mesmo que a fonte.

Ao invés de:

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

Tente isso:

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

1
Essa resposta realmente não traz um novo ponto se estivermos olhando para as outras respostas existentes.
Isuka

1

Em vez de diminuir diretamente o número de dias diretamente do objeto de data, primeiro obtenha o valor da data e subtraia os dias. Veja o exemplo abaixo:

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

Aqui, someDate é uma variável do tipo DateTime.


0

Usar AddDays(-1)funcionou para mim até que tentei atravessar meses. Quando tentei subtrair 2 dias de 01-01-2017, o resultado foi 2016-00-30. Não conseguiu lidar com a mudança do mês corretamente (embora o ano parecesse bom).

Eu usei date = Convert.ToDateTime(date).Subtract(TimeSpan.FromDays(2)).ToString("yyyy-mm-dd"); e não tenho problemas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.