2011-01-24 42 views
6

Có cách nào để đặt giá trị âm khi gọi hàm tạo DateTime không.Giá trị âm trong C# DateTime

như thế này:

DateTime date = new DateTime(2011, 2, -1); 

sẽ được giống như:

DateTime date = new DateTime(2011, 1, 31); 

Tôi biết điều này bằng các ngôn ngữ khác, nhưng vấn đề là C# .net ném một ngoại lệ khi tôi làm điều này. Bất kỳ ý tưởng về cách làm điều này trong C# .net?

+0

điều này không thể hoạt động khác với ngôn ngữ .net khác nhau, vì 'DateTime' là một phần của thư viện chung. – Andrey

+0

tại sao bạn muốn có ngày giờ âm? nếu bạn muốn trừ thời gian thì hãy sử dụng .AddDays (-x) hoặc .AddMonths (-x) vv hoặc có một lớp khác gọi là TimeSpan mà bạn có thể sử dụng cho thời gian không phải là 1 toàn bộ ngày hoặc 1 tháng toàn bộ, v.v. – WraithNath

+0

@ WraithNath: Làm thế nào tôi phải viết một ứng dụng trong .net để được nhắc nhở về sinh nhật của những con khủng long của tôi với giới hạn đó!?!?! – Mystra007

Trả lời

8

Bạn không thể. Nếu bạn muốn có được ngày cuối cùng của tháng, bạn nên bắt đầu với sự bắt đầu của tháng tiếp theo và sau đó cất cánh một ngày hoặc sử dụng DateTime.DaysInMonth(year, month).

Cá nhân tôi sẽ sử dụng cách tiếp cận thứ hai, nếu không bạn phải đảm bảo bạn xử lý việc tìm ngày cuối cùng trong tháng 12 một cách chính xác bằng cách bắt đầu từ ngày 1 tháng 1 của năm tiếp theo. Đây là mã tôi muốn sử dụng:

DateTime date = new DateTime(year, month, DateTime.DaysInMonth(year, month)); 
10

Sử dụng

DateTime date = new DateTime(2011, 2,1).AddDays(-1); 
+0

Tôi nhớ bị nhầm lẫn về cách bạn có thể thêm ngày trừ khi tôi bắt đầu .net: P – nik0lias

+2

@ nik0lias: Hehe =) Tôi có nền tảng về toán học và sẽ bị nhầm lẫn nếu bạn không thể thêm giá trị âm! – Jens

1

A DateTime luôn là vị trí tuyệt đối đúng lúc. Tôi nghĩ những gì bạn đang tìm kiếm là TimeSpan, cũng có thể là số âm.

Các vấn đề liên quan