Kurangi hari dari DateTime

142

Saya memiliki kode berikut dalam program C # saya.

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

Setiap kali saya menjalankannya, saya mendapatkan kesalahan berikut:

Nilai tambah atau kurang menghasilkan DateTime yang tidak dapat diwakili.
Nama parameter: nilai

Saya belum pernah melihat pesan kesalahan ini sebelumnya, dan tidak mengerti mengapa saya melihatnya. Dari jawaban yang saya baca sejauh ini, saya yakin bahwa saya bisa menggunakan -1 dalam operasi tambah untuk mengurangi hari, tetapi karena pertanyaan saya menunjukkan ini bukan kasus untuk apa yang saya coba lakukan.

Buena
sumber
Haruskah bekerja, apakah ini masalah?
V4Vendetta
1
itu harus bekerja, tidak melihat ada masalah dengan ini ...
Tigran
12
Kesalahan itu biasanya terjadi ketika Anda mencoba mengurangi interval dari DateTime.MinValueatau Anda ingin menambahkan sesuatu ke DateTime.MaxValue(atau Anda mencoba untuk instantiate tanggal di luar interval min-max ini). Apakah Anda yakin tidak menugaskan MinValuesuatu tempat?
CyberDude
1
CyberDude, komentar Anda sebenarnya adalah Jawaban. Bagaimana saya bisa memberikan suara pada Komentar Anda dan Tetapkan sebagai Jawaban?
Buena
1
Silakan kirim kode antara baris 2 dan 3 kode Anda
Panagiotis Kanavos

Jawaban:

70

Kesalahan itu biasanya terjadi ketika Anda mencoba mengurangi interval dari DateTime.MinValueatau Anda ingin menambahkan sesuatu ke DateTime.MaxValue(atau Anda mencoba untuk instantiate tanggal di luar interval min-max ini). Apakah Anda yakin tidak menugaskan MinValuesuatu tempat?

CyberDude
sumber
287
DateTime dateForButton = DateTime.Now.AddDays(-1);
christiandev
sumber
14
Jawaban ini, jawab judul topik. Ini seharusnya tidak diturunkan. Sebagian besar orang datang ke sini dari google. Jika seseorang tidak setuju dengan jawaban ini harus menawarkan suntingan pada judul topik. ¬¬
MarceloBarbosa
Bekerja untuk saya bahkan selama berbulan-bulan.
David Jones
48

Anda dapat melakukan:

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

Anda dapat menggunakan kode berikut:

dateForButton = dateForButton.Subtract(TimeSpan.FromDays(1));
Rajesh Subramanian
sumber
4
Ini juga akan gagal jika tanggalnya adalah DateTime.MinValue. AddDays (-1) berfungsi dengan baik
Panagiotis Kanavos
7

Tidak dateTime.AddDays(-1) mengurangi satu hari dari dateTimereferensi. Ini akan mengembalikan contoh baru, dengan itu suatu hari dikurangi dari referensi asli.

DateTime dateTime = DateTime.Now;
DateTime otherDateTime = dateTime.AddDays(-1);
cahit beyaz
sumber
Ingin menjelaskan bagaimana ini akan menyelesaikan masalah OP? Hampir semua orang dapat menulis kode, itu bagian yang mudah. (Namun, dalam kasus ini, saya sebenarnya tidak melihat bagaimana ini akan menyelesaikan masalah OP sama sekali.)
fourpastmidnight
5

Saya punya masalah menggunakan AddDays (-1) .

Solusi saya adalah TimeSpan .

DateTime.Now - TimeSpan.FromDays(1);
UsernameNotFound
sumber
Apa masalah sebenarnya Anda?
Arash.Zandi
4

Objek (yaitu variabel tujuan) untuk metode AddDays tidak boleh sama dengan sumbernya.

Dari pada:

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

Coba ini sebagai gantinya:

DateTime today = DateTime.Today;
DateTime sevenDaysEarlier = today.AddDays(-7);
Mark Benson
sumber
1
Jawaban ini tidak benar-benar membawa poin baru jika kita mencari jawaban lain yang ada.
Isuka
1

Alih-alih langsung mengurangi jumlah hari dari objek tanggal secara langsung, dapatkan nilai tanggal terlebih dahulu kemudian kurangi hari. Lihat contoh di bawah ini:

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

Di sini, someDate adalah variabel tipe DateTime.

Sambhav jain
sumber
0

Menggunakan AddDays(-1) bekerja untuk saya sampai saya mencoba melewati bulan. Ketika saya mencoba mengurangi 2 hari dari 2017-01-01 hasilnya adalah 2016-00-30. Itu tidak bisa menangani perubahan bulan dengan benar (meskipun tahun tampaknya baik-baik saja).

Saya menggunakan date = Convert.ToDateTime(date).Subtract(TimeSpan.FromDays(2)).ToString("yyyy-mm-dd"); dan tidak memiliki masalah.

Ainsley Hobart
sumber