2010-04-29 30 views
21

Tôi chỉ muốn thêm 1 ngày vào DateTime. Vì vậy, tôi đã viết:Thêm một TimeSpan vào một DateTime đã cho

DateTime date = new DateTime(2010, 4, 29, 10, 25, 00); 
TimeSpan t = new TimeSpan(1, 0, 0, 0); 

date.Add(t); 

Console.WriteLine("A day after the day: " + date.ToString()); 

Tôi nghĩ kết quả sẽ là: 2010 04 30- 10:25:00 nhưng tôi vẫn nhận được ngày đầu tiên.

Có vấn đề gì?

Trả lời

51

DateTime giá trị bất biến . Phương thức Add trả về giá trị DateTime mới với số lượng TimeSpan được thêm vào.

này hoạt động:

Console.WriteLine("A day after the day: " + date.Add(t).ToString()); 
+0

Cảm ơn. Giải quyết vấn đề của tôi! –

+0

bạn có thể muốn chấp nhận câu trả lời này. –

+0

Có.Tôi sẽ. Tôi chỉ có một hạn chế, SO không cho phép tôi làm điều đó trước 11 phút. Không biết tại sao .. –

5

Điều gì sai khi thực hiện date = date.AddDays(1)?

+0

Tuy có cùng một vấn đề - DateTimes là không thay đổi :) –

+0

Time Delta của tôi là một TimeSpan. Vì vậy, tôi không thể sử dụng AddDays có một số nguyên như một tham số. –

+0

@Amokrane, nếu delta của bạn là một khoảng thời gian, tôi nghĩ bạn nên thay đổi tên câu hỏi. –

15

Bạn cần thay đổi một dòng:

date = date.Add(t); 
5

Kết quả của date.Add (t) là những gì bạn đang sau:

DateTime date = new DateTime(2010, 4, 29, 10, 25, 00); 
TimeSpan t = new TimeSpan(1, 0, 0, 0); 

// The change is here, setting date to be the *new* date produced by calling Add 
date = date.Add(t); 

Console.WriteLine("A day after the day: " + date.ToString()); 
7

Một DateTime là không thay đổi, nhưng Add và Trừ chức năng quay trở lại mới Ngày giờ cho bạn sử dụng.

DateTime tomorrow = DateTime.Now.AddDays(1); 
2
date.Add(t); 

trả về một DateTime sửa đổi và không thay đổi ví dụ ban đầu mà bạn gọi phương thức Add trên.

8

dtb là đúng về DateTime là không thay đổi. Hãy suy nghĩ theo cách này: a DateTime là loại giá trị, đặt cùng loại với int hoặc double. Các trường hợp của các cấu trúc này không thể sửa đổi được; chúng chỉ có thể được đánh giá và sao chép.

xem xét mã này:

int i = 4; 

i + 2;  // does not compile, but what if it did? 
      // would i become 6? clearly not -- 
      // i + 2 expresses a NEW value, which can 
      // be copied somewhere 

i = i + 2; // there we go -- that's better 

Đây là tương tự như:

DateTime d = DateTime.Now; 
TimeSpan t = TimeSpan.FromDays(1.0); 

d.Add(t);  // compiles (because AddDays is a function), 
       // but is really the same as i + 2 above 

d = d.Add(t); // that's better 

Bằng cách này, có một điều có thể giúp làm cho điều này rõ ràng hơn là nhận ra rằng những dòng trên, d = d.Add(t), là giống như d = d + t. Và bạn sẽ không viết d + t trên dòng riêng của nó, giống như bạn sẽ không viết i + 2 trên dòng riêng của nó.

1

DateTime sẽ không hoạt động nếu DateTime obj datatype là "DateTime?" trong đó có chấp nhận giá trị null, trong trường hợp như vậy DateTime? dt = DateTime.Now;

 DateTime dateObj = new DateTime(); 

     dateObj = Convert.ToDateTime(dt.ToString()); 

     var Month3 = dateObj.AddMonths(3);` 
Các vấn đề liên quan