2010-05-19 78 views
5

Tôi muốn so sánh hai ngày giờ.So sánh ngày giờ trong C#

Ex:

date1 = 13/01/2004 12:20:00 
    date2 = 13/01/2004 12:35:00 
    result = Compare(date2-date1); 
    O/P : 15 Minutes 

Trả lời

11

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

TimeSpan diff = date2.Subtract(date1); 
+0

Là một TimeSpan luôn tích cực? Vì vậy: date2.Subtract (date1) bằng: date1.Subtract (date2) ??? – Michiel

+1

@Michiel, không, kết quả sẽ khác nhau, một là số dương (+ 15 phút, +0,25 giờ, +900000 ve) và số khác âm (-15 phút, -0,25 giờ, -900000 ve) – Artru

4

Làm thế nào về

if (date1 < date2) 
{ 
    // date1 is before date2 
} 
13

Để so sánh, bạn chỉ có thể sử dụng < điều hành: date1 < date2.

Nếu bạn muốn so sánh với độ phân giải đã cho, hãy thử date1.TotalMinutes == date2.TotalMinutes (điều này so với cùng phút).

Nếu bạn muốn biết nếu sự khác biệt là trong một khoảng thời gian nhất định, sử dụng này:

System.TimeSpan dt = date2.Subtract(date1); 
if (dt.TotalMinutes < 15) //... 
3

Bạn có thể sử dụng

double minutes = d2.Subtract(d1).TotalMinutes; 

Để có được sự khác biệt hoàn toàn trong vài phút.

1

Tôi không hiểu đầy đủ những gì bạn đang yêu cầu.

Nếu bạn muốn pseudo-code của bạn thể hiện trong C# ở đây bạn đi ...

 //date1 = 13/01/2004 12:20:00 
     DateTime dateTime1 = new DateTime(2004, 01, 13, 12, 20, 0); 
     //date2 = 13/01/2004 12:35:00 
     DateTime dateTime2 = new DateTime(2004, 01, 13, 12, 35, 0); 

     //get the time difference - result = Compare(date2-date1); 
     TimeSpan result = dateTime2 - dateTime1; 

     //output is 15 
     Console.WriteLine(result.TotalMinutes); 
1

Làm thế nào về:

Timespan ts = date2 - date1; 
Console.WriteLine("Value of Minutes = ", ts.Minutes); 
0
DateTime date1 = DateTime.Now; 
DateTime date2 = DateTime.Now; 

var x = date1.CompareTo(date2); 

EDIT: Tôi thấy bây giờ mà bạn muốn để có được chênh lệch thời gian giữa hai ngày. Cho rằng bạn sử dụng lớp TimeSpan.

0

Đây là cược tốt nhất.

using System; 

public class Example 
{ 
    public static void Main() 
    { 
     DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0); 
     DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0); 
     int result = DateTime.Compare(date1, date2); 
     string relationship; 

     if (result < 0) 
     relationship = "is earlier than"; 
     else if (result == 0) 
     relationship = "is the same time as";   
     else 
     relationship = "is later than"; 

     Console.WriteLine("{0} {1} {2}", date1, relationship, date2); 
    } 
} 
// The example displays the following output: 
// 8/1/2009 12:00:00 AM is earlier than 8/1/2009 12:00:00 PM 
0

Theo lời của Larry Wall, có nhiều cách để thực hiện việc này. Nếu bạn đang tìm kết quả -1, 0, +1 của một so sánh trong một khoảng thời gian nhất định, hãy thử một trong các biến thể này;

internal static int XDateCompare(DateTime date, DateTime other, int ticks) 
    { 
     var diff = date.Ticks - other.Ticks; 

     var result = Math.Abs(diff) <= ticks ? 0 
      : diff <= 0 ? -1 
      : 1; 

     Console.WriteLine("{0}\t{1}\t{2}\ts={3} milSec={4}", diff, other, result, ticks, date.Subtract(other).Duration().TotalMilliseconds); 

     return result; 
    } 

    internal static int XDateCompare(DateTime date, DateTime other, double milliseconds) 
    { 
     double diff = 
      date.Subtract(other) 
      .TotalMilliseconds; 

     var result = Math.Abs(diff) <= milliseconds ? 0 
      : diff <= 0 ? -1 
      : 1; 

     Console.WriteLine("result {0} diff {1} vs ms {2}", result, diff, milliseconds); 

     return result; 
    }