Làm cách nào để có được sự khác biệt về thời gian giữa hai đối tượng DateTime bằng C #?


159

Làm cách nào để có được sự khác biệt về thời gian giữa hai DateTimeđối tượng sử dụng C #?

Câu trả lời:


227

Ví dụ sau đây cho thấy cách thực hiện việc này:

DateTime a = new DateTime(2010, 05, 12, 13, 15, 00);
DateTime b = new DateTime(2010, 05, 12, 13, 45, 00);
Console.WriteLine(b.Subtract(a).TotalMinutes);

Khi thực hiện điều này sẽ in "30" vì có chênh lệch 30 phút giữa ngày / lần.

Kết quả DateTime.Subtract(DateTime x)là một Đối tượng TimeSpan cung cấp các thuộc tính hữu ích khác.


5
Để hiển thị sự khác biệt, hãy làm một cái gì đó như thế này : Console.WriteLine((a - b).ToString(@"hh\:mm\:ss")). Xem: Định dạng thời gian tùy chỉnh MSDN
ishmael

Điều này làm việc cho tôi. Tôi chỉ muốn khách hàng mất bao nhiêu giây để thực hiện cuộc gọi REST và nhận lại phản hồi.
Ziggler

1
Hãy chú ý sử dụng TotalMinutes! (không Minutes)
Shahar Shokrani

63

Bạn muốn TimeSpancấu trúc:

TimeSpan diff = dateTime1 - dateTime2;

Một đối tượng TimeSpan biểu thị một khoảng thời gian (khoảng thời gian hoặc thời gian đã trôi qua) được đo bằng số ngày dương hoặc âm của ngày, giờ, phút, giây và phân số của giây. Cấu trúc TimeSpan cũng có thể được sử dụng để biểu thị thời gian trong ngày, nhưng chỉ khi thời gian không liên quan đến một ngày cụ thể.

Có nhiều phương pháp khác nhau để lấy lại ngày, giờ, phút, giây và mili giây từ cấu trúc này.

Nếu bạn chỉ quan tâm đến sự khác biệt thì:

TimeSpan diff = Math.Abs(dateTime1 - dateTime2);

sẽ cung cấp cho bạn sự khác biệt tích cực giữa các lần bất kể thứ tự.

Nếu bạn vừa có thành phần thời gian nhưng thời gian có thể được chia cho nửa đêm thì bạn cần thêm 24 giờ vào khoảng thời gian để có được sự khác biệt thực tế:

TimeSpan diff = dateTime1 - dateTime2;
if (diff < 0)
{
    diff = diff + TimeSpan.FromDays(1);
}

xin chào, nếu datetime2 là 09:00 và dateTime1 là 18:00 thì diff là 09 giờ 00 phút. thì phương trình của datetime2 là 21:00 và dateTime1 là 03:00 thì sự khác biệt là âm và sai. Làm thế nào để giải quyết điều này?
Pranesh Janarthanan

@Pranesh - nếu các đối tượng chứa một ngày thì không nên có vấn đề. Nếu chúng không chứa thời gian thì hãy lấy chênh lệch tuyệt đối hoặc thêm 24 giờ vào khoảng thời gian để tạo ra sự khác biệt tích cực. Điều này là chính xác sẽ phụ thuộc vào ứng dụng của bạn.
ChrisF

Vâng, tôi đã xóa những bình luận đó rồi! bạn có thể chỉ cho tôi một ví dụ mã để giải thích ur?
Pranesh Janarthanan

30

Những gì bạn cần là sử dụng phương thức Subtract của lớp DateTime , trả về TimeSpan .

var dateOne = DateTime.Now;
var dateTwo = DateTime.Now.AddMinutes(-5);
var diff = dateTwo.Subtract(dateOne);
var res = String.Format("{0}:{1}:{2}", diff.Hours,diff.Minutes,diff.Seconds));

10

Cách tôi thường làm là trừ hai DateTime và điều này mang lại cho tôi một TimeSpan sẽ cho tôi biết khác biệt.

Đây là một ví dụ:

DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;

4

NẾU chúng là cả hai giá trị thời gian ngày UTC bạn có thể làm TimeSpan diff = dateTime1 - dateTime2;

Nếu không, cơ hội của bạn để có được câu trả lời chính xác trong mọi trường hợp có thể là bằng không.


3
 var startDate = new DateTime(2007, 3, 24);

 var endDate = new DateTime(2009, 6, 26);

 var dateDiff = endDate.Subtract(startDate);

 var date = string.Format("{0} years {1} months {2} days", (int)dateDiff.TotalDays / 365, 
 (int)(dateDiff.TotalDays % 365) / 30, (int)(dateDiff.TotalDays % 365) / 30);

 Console.WriteLine(date);

2

Bạn cần sử dụng TimeSpan . Đây là một số mã mẫu:

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);

2
Hoặc chỉTimeSpan sincelast = DateTime.Now - LastUpdate;
Ben M

2
private void button1_Click(object sender, EventArgs e)
{
    TimeSpan timespan;
    timespan = dateTimePicker2.Value - dateTimePicker1.Value;
    int timeDifference = timespan.Days;
    MessageBox.Show(timeDifference.ToString());
}

2

Bạn có thể sử dụng theo cách sau để đạt được sự khác biệt giữa hai Đối tượng Ngày tháng. Giả sử có các đối tượng DateTime dt1 và dt2 thì mã.

TimeSpan diff = dt2.Subtract(dt1);
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.