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.


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?


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

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)

38

Anda dapat menggunakan kode berikut:

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

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);

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);

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);

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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.