C # kullanarak iki DateTime nesnesi arasındaki zaman farkını nasıl alabilirim?


159

DateTimeC # kullanarak iki nesne arasındaki zaman farkını nasıl alabilirim ?

Yanıtlar:


227

Aşağıdaki örnekte bunun nasıl yapılacağı gösterilmektedir:

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);

Yürütüldüğünde, tarih / saatler arasında 30 dakikalık bir fark olduğundan "30" yazdırılır.

Bunun sonucu, diğer yararlı özellikleri veren DateTime.Subtract(DateTime x)bir TimeSpan Nesnesi'dir .


5
Farkı görüntülemek için böyle bir şey yapmak: Console.WriteLine((a - b).ToString(@"hh\:mm\:ss")). Bkz: MSDN Özel TimeSpan Biçimi
ishmael

Bu benim için çalıştı. İstemcinin bir REST çağrısı yapması ve yanıt alması kaç saniye sürdü.
Ziggler

1
Kullanmaya dikkat edin TotalMinutes! (değil Minutes)
Shahar Shokrani

64

TimeSpanYapıyı istiyorsunuz :

TimeSpan diff = dateTime1 - dateTime2;

Bir TimeSpan nesnesi, pozitif veya negatif gün, saat, dakika, saniye ve saniyenin kesir sayısı olarak ölçülen bir zaman aralığını (süre veya geçen süre) temsil eder. TimeSpan yapısı, günün saatini temsil etmek için de kullanılabilir, ancak yalnızca belirli bir tarihle ilgisi yoksa.

Günleri, saatleri, dakikaları, saniyeleri ve milisaniyeleri bu yapıdan geri almak için çeşitli yöntemler vardır.

Sadece farkla ilgileniyorsanız:

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

sipariş ne olursa olsun zaman arasındaki olumlu farkı verecektir.

Eğer zaman bileşenini yeni aldıysanız, ancak saatler gece yarısına kadar bölünebiliyorsa, gerçek farkı elde etmek için açıklığa 24 saat eklemeniz gerekir:

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

merhaba, datetime2 09:00 ve dateTime1 18:00 ise diff 09Hours 00 dk. datetime2 için denklem 21:00 ve dateTime1 03:00 olur, fark negatif ve yanlıştır. Bunu nasıl çözebilirim?
Pranesh Janarthanan

@Pranesh - nesneler bir tarih içeriyorsa, bir sorun olmamalıdır. Bir zaman içermezlerse, ya mutlak farkı alın ya da pozitif bir fark vermek için zaman aralığına 24 saat ekleyin. Hangisi doğru, uygulamanıza bağlı olacaktır.
ChrisF

Evet, bu yorumu zaten kaldırdım! bana açıklama için bir kod örneği gösterebilir misin?
Pranesh Janarthanan

30

İhtiyacınız olan şey , TimeSpan döndüren DateTime sınıfları Çıkarma yöntemini kullanmaktır .

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

Genellikle bunu yapmak iki DateTime çıkarma ve bu bana fark söyleyecek bir TimeSpan alır.

İşte bir örnek:

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

4

Her ikisi de yapabileceğiniz UTC tarih-saat değerleri ise TimeSpan diff = dateTime1 - dateTime2;

Aksi takdirde, olası her durumda doğru cevabı alma şansınız sıfırdır.


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

Bir TimeSpan kullanmanız gerekir . İşte bazı örnek kod:

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

2
Veya sadeceTimeSpan 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

İki Tarih / Saat Nesnesi arasındaki farkı elde etmek için aşağıdaki şekilde kullanabilirsiniz. Dt1 ve dt2 kodlarının ardından DateTime nesneleri olduğunu varsayalım.

TimeSpan diff = dt2.Subtract(dt1);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.