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.

Buena
fonte
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?

CyberDude
fonte
287
DateTime dateForButton = DateTime.Now.AddDays(-1);
christiandev
fonte
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)
sam
fonte
38

Você pode usar o seguinte código:

dateForButton = dateForButton.Subtract(TimeSpan.FromDays(1));
Rajesh Subramanian
fonte
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);
cahit beyaz
fonte
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
5

Eu tive problemas usando AddDays (-1) .

Minha solução é TimeSpan .

DateTime.Now - TimeSpan.FromDays(1);
Nome de usuário não encontrado
fonte
Qual foi o seu problema exato?
Arash.Zandi 24/07
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);
Mark Benson
fonte
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.

Sambhav jain
fonte
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.

Ainsley Hobart
fonte