DateTime öğesinden gün çıkarma


142

Benim C # programında aşağıdaki kodu var.

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

Ne zaman çalıştırırsam, aşağıdaki hatayı alıyorum:

Toplanan veya çıkarılan değer temsil edilemez bir DateTime ile sonuçlanır.
Parametre adı: değer

Iv'e daha önce bu hata mesajını hiç görmedi ve neden gördüğümü anlamıyorum. Iv'e şu ana kadar okuduğum cevaplardan, günleri çıkarmak için bir ekleme işleminde -1 kullanabileceğime inanıyorum, ancak sorum gösterdiği gibi, yapmaya çalıştığım şey için durum böyle değil.


Çalışmalı mı, sorunlu alan bu mu?
V4Vendetta

1
o vardır ... Bu herhangi bir sorun görmüyorum, işe
Tigran

12
Bu hata genellikle aralığından bir aralık çıkarmaya çalıştığınızda DateTime.MinValueveya bir şey eklemek istediğinizde DateTime.MaxValue(veya bu min-maks aralığının dışında bir tarih başlatmaya çalıştığınızda) oluşur. Bir MinValueyere atamadığınızdan emin misiniz ?
CyberDude

1
CyberDude, yorumunuz aslında Cevap. Yorumunuza nasıl oy verebilir ve Cevap olarak atayabilirim?
Buena

1
Lütfen kodu kodunuzun 2. ve 3. satırları arasında
yayınlayın

Yanıtlar:


70

Bu hata genellikle aralığından bir aralık çıkarmaya çalıştığınızda DateTime.MinValueveya bir şey eklemek istediğinizde DateTime.MaxValue(veya bu min-maks aralığının dışında bir tarih başlatmaya çalıştığınızda) oluşur. Bir MinValueyere atamadığınızdan emin misiniz ?


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

14
Bu cevap, konu başlığına cevap verin. Bu asla reddedilmemelidir. İnsanların çoğu buraya google'dan geliyor. Birisi bu yanıtı kabul etmezse, konu başlığı üzerinde bir düzenleme sunmalıdır. ¬¬
MarceloBarbosa

Aylar boyunca bile benim için çalıştı.
David Jones

48

Yapabilirsin:

DateTime.Today.AddDays(-1)

38

Aşağıdaki kodu kullanabilirsiniz:

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

4
Tarih DateTime.MinValue ise bu da başarısız olur. AddDays (-1) de iyi çalışıyor
Panagiotis Kanavos

7

Bu dateTime.AddDays(-1) , dateTimereferanstan bir gün çıkarmaz . Bir gün orijinal referanstan çıkarılmış olarak yeni bir örnek döndürür.

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

Bunun OP'nin problemini nasıl çözeceğini açıklamak ister misiniz? Hemen hemen herkes kod yazabilir, bu kolay kısımdır. (Bununla birlikte, bu durumda, aslında OP'nin problemini nasıl çözeceğini görmüyorum.)
fourpastmidnight


4

AddDays yöntemi için nesne (yani hedef değişken) kaynakla aynı olamaz.

Onun yerine:

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

Bunun yerine şunu deneyin:

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

1
Mevcut cevaplara baktığımızda bu cevap gerçekten yeni bir nokta getirmiyor.
Isuka

1

Tarih nesnesinden gün sayısını doğrudan azaltmak yerine, önce tarih değerini al, sonra günleri çıkar. Aşağıdaki örneğe bakın:

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

Burada, someDate DateTime türünde bir değişkendir.


0

AddDays(-1)Aylar geçene kadar kullanmak benim için çalıştı. 2017-01-01'den 2 gün çıkarmaya çalıştığımda sonuç 2016-00-30 idi. Ay değişikliğini doğru bir şekilde ele alamadı (yıl iyi görünüyordu).

Kullandım date = Convert.ToDateTime(date).Subtract(TimeSpan.FromDays(2)).ToString("yyyy-mm-dd"); ve sorunum yok.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.