Trừ các ngày từ DateTime


142

Tôi có đoạn mã sau trong chương trình C # của mình.

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

Bất cứ khi nào tôi chạy nó, tôi nhận được lỗi sau:

Giá trị được thêm hoặc trừ sẽ dẫn đến DateTime không thể biểu thị.
Tên tham số: giá trị

Trước đây tôi chưa bao giờ thấy thông báo lỗi này và không hiểu tại sao tôi lại thấy nó. Từ những câu trả lời mà Iv'e đã ​​đọc cho đến nay, tôi tin rằng tôi có thể sử dụng -1 trong một thao tác thêm để trừ ngày, nhưng như câu hỏi của tôi cho thấy đây không phải là trường hợp tôi đang cố gắng làm.


Nên làm việc, đây có phải là vấn đề khu vực?
V4Vendetta

1
làm việc, không nhìn thấy bất kỳ vấn đề với điều này ...
Tigran

12
Lỗi đó thường xảy ra khi bạn cố gắng trừ một khoảng từ DateTime.MinValuehoặc bạn muốn thêm một cái gì đó vào DateTime.MaxValue(hoặc bạn cố gắng khởi tạo một ngày bên ngoài khoảng tối thiểu tối thiểu này). Bạn có chắc là bạn không chỉ định MinValueở đâu đó không?
CyberDude

1
CyberDude, bình luận của bạn trong thực tế Trả lời. Làm thế nào tôi có thể bỏ phiếu cho Nhận xét của bạn và Gán nó là Trả lời?
Buena

1
Vui lòng gửi mã giữa dòng 2 và 3 của mã của bạn
Panagiotis Kanavos

Câu trả lời:


70

Lỗi đó thường xảy ra khi bạn cố gắng trừ một khoảng từ DateTime.MinValuehoặc bạn muốn thêm một cái gì đó vào DateTime.MaxValue(hoặc bạn cố gắng khởi tạo một ngày bên ngoài khoảng tối thiểu tối thiểu này). Bạn có chắc là bạn không chỉ định MinValueở đâu đó không?


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

14
Câu trả lời này, trả lời tiêu đề chủ đề. Điều này không bao giờ nên được đánh giá thấp. Hầu hết mọi người đến đây từ google. Nếu ai đó không đồng ý với câu trả lời này nên đưa ra một chỉnh sửa về tiêu đề chủ đề. ¬¬
MarceloBarbosa

Làm việc cho tôi thậm chí qua nhiều tháng.
David Jones

48

Bạn có thể làm:

DateTime.Today.AddDays(-1)

38

Bạn có thể sử dụng mã sau đây:

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

4
Điều này cũng sẽ thất bại nếu ngày là DateTime.MinValue. AddDays (-1) cũng hoạt động tốt
Panagiotis Kanavos

7

Các dateTime.AddDays(-1) không trừ rằng một ngày nào từ dateTimetài liệu tham khảo. Nó sẽ trả về một thể hiện mới, với một ngày được trừ khỏi tham chiếu ban đầu.

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

Muốn giải thích điều này sẽ giải quyết vấn đề của OP như thế nào? Hầu như ai cũng có thể viết mã, đó là phần dễ dàng. (Tuy nhiên, trong trường hợp này, tôi thực sự không thấy điều này sẽ giải quyết vấn đề của OP như thế nào.)
Fourpastmidnight


4

Đối tượng (tức là biến đích) cho phương thức AddDays không thể giống với nguồn.

Thay vì:

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

Hãy thử điều này thay thế:

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

1
Câu trả lời này không thực sự mang lại một điểm mới nếu chúng ta đang tìm kiếm các câu trả lời hiện có khác.
Isuka

1

Thay vì trực tiếp giảm số ngày từ đối tượng ngày trực tiếp, trước tiên hãy lấy giá trị ngày sau đó trừ đi ngày. Xem ví dụ dưới đây:

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

Ở đây, someDate là một biến kiểu DateTime.


0

Sử dụng AddDays(-1)làm việc cho tôi cho đến khi tôi cố gắng vượt qua nhiều tháng. Khi tôi cố gắng trừ 2 ngày kể từ 2017-01-01, kết quả là 2016-00-30. Nó không thể xử lý thay đổi tháng một cách chính xác (mặc dù năm có vẻ ổn).

Tôi đã sử dụng date = Convert.ToDateTime(date).Subtract(TimeSpan.FromDays(2)).ToString("yyyy-mm-dd"); và không có vấn đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.