ลบวันจาก DateTime


142

ฉันมีรหัสต่อไปนี้ในโปรแกรม C # ของฉัน

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

เมื่อใดก็ตามที่ฉันเรียกใช้ฉันได้รับข้อผิดพลาดต่อไปนี้:

มูลค่าที่เพิ่มหรือหักออกจะทำให้ DateTime ไม่สามารถแทนค่าได้
ชื่อพารามิเตอร์: ค่า

Iv'e ไม่เคยเห็นข้อความแสดงข้อผิดพลาดนี้มาก่อนและไม่เข้าใจว่าทำไมฉันจึงเห็นข้อความนี้ จากคำตอบที่ Iv'e อ่านมาฉันเชื่อว่าฉันสามารถใช้ -1 ในการดำเนินการบวกเพื่อลบจำนวนวัน แต่เนื่องจากคำถามของฉันแสดงให้เห็นว่านี่ไม่ใช่กรณีของสิ่งที่ฉันพยายามทำ


ควรจะทำงานนี่เป็นปัญหาหรือไม่
V4Vendetta

1
มันมีการทำงานไม่เห็นปัญหาใด ๆ กับนี้ ...
Tigran

12
ข้อผิดพลาดนั้นมักเกิดขึ้นเมื่อคุณพยายามที่จะลบช่วงเวลาDateTime.MinValueหรือคุณต้องการเพิ่มบางสิ่งลงในDateTime.MaxValue(หรือคุณพยายามยกตัวอย่างวันที่นอกช่วงเวลา min-max นี้) คุณแน่ใจหรือไม่ว่าคุณไม่ได้มอบหมายงานให้ที่MinValueอื่น
CyberDude

1
CyberDude ความคิดเห็นของคุณเป็นจริงคำตอบ ฉันจะลงคะแนนในความคิดเห็นของคุณและกำหนดเป็นคำตอบได้อย่างไร
บูเอนา

1
โปรดโพสต์รหัสระหว่างบรรทัดที่ 2 และ 3 ของรหัสของคุณ
Panagiotis Kanavos

คำตอบ:


70

ข้อผิดพลาดนั้นมักเกิดขึ้นเมื่อคุณพยายามที่จะลบช่วงเวลาDateTime.MinValueหรือคุณต้องการเพิ่มบางสิ่งลงในDateTime.MaxValue(หรือคุณพยายามยกตัวอย่างวันที่นอกช่วงเวลา min-max นี้) คุณแน่ใจหรือไม่ว่าคุณไม่ได้มอบหมายงานให้ที่MinValueอื่น


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

14
คำตอบนี้ตอบหัวข้อหัวข้อ สิ่งนี้ไม่ควรถูกลดลง คนส่วนใหญ่มาที่นี่จาก google หากมีคนไม่เห็นด้วยกับคำตอบนี้ควรเสนอการแก้ไขในหัวข้อหัวข้อ ¬¬
MarceloBarbosa

ทำงานให้ฉันแม้กระทั่งตลอดหลายเดือน
เดวิดโจนส์


38

คุณสามารถใช้รหัสต่อไปนี้:

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

4
สิ่งนี้จะล้มเหลวหากวันที่คือ DateTime.MinValue AddDays (-1) ก็ใช้ได้เช่นกัน
Panagiotis Kanavos

7

dateTime.AddDays(-1) ไม่ลบว่าวันหนึ่งจากdateTimeการอ้างอิง มันจะส่งคืนอินสแตนซ์ใหม่โดยลบออกหนึ่งวันจากข้อมูลอ้างอิงดั้งเดิม

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

สนใจอธิบายว่าสิ่งนี้จะแก้ปัญหาของ OP ได้อย่างไร เกือบทุกคนสามารถเขียนโค้ดได้นั่นเป็นส่วนที่ง่าย (อย่างไรก็ตามในกรณีนี้ฉันไม่เห็นว่าสิ่งนี้จะแก้ปัญหาของ OP ได้อย่างไร)
4pastmidnight

5

ผมเคยมีปัญหาในการใช้AddDays (-1)

วิธีการแก้ปัญหาของฉันคือTimeSpan

DateTime.Now - TimeSpan.FromDays(1);

ปัญหาที่แน่นอนของคุณคืออะไร?
Arash.Zandi

4

วัตถุ (เช่นตัวแปรปลายทาง) สำหรับวิธีการ AddDays ต้องไม่เหมือนกับแหล่งที่มา

แทน:

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

ลองใช้สิ่งนี้แทน:

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

1
คำตอบนี้ไม่ได้นำมาซึ่งจุดใหม่ถ้าเรากำลังมองหาคำตอบอื่น
Isuka

1

แทนที่จะลดจำนวนวันโดยตรงจากวัตถุวันที่โดยตรงให้รับค่าวันที่ก่อนแล้วจึงลบจำนวนวัน ดูตัวอย่างด้านล่าง:

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

ที่นี่ someDate เป็นตัวแปรชนิด DateTime


0

การใช้AddDays(-1)งานได้ผลกับฉันจนกว่าฉันจะพยายามข้ามเดือน เมื่อฉันพยายามลบ 2 วันตั้งแต่ 2017-01-01 ผลลัพธ์คือ 2016-00-30 ไม่สามารถจัดการกับการเปลี่ยนแปลงเดือนได้อย่างถูกต้อง (แม้ว่าปีจะดีขึ้น)

ฉันใช้date = Convert.ToDateTime(date).Subtract(TimeSpan.FromDays(2)).ToString("yyyy-mm-dd"); และไม่มีปัญหา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.