2010-11-05 11 views
12

Bir DateTime.Now örneğini, temsil ettiği saniye sayısına dönüştürecek bir işlev yazmaya çalışıyorum, böylece bunu başka bir DateTime örneğiyle karşılaştırabilirim. İşte şu anda ne var:DateTime.Now to Saniye

public static int convertDateTimeToSeconds(DateTime dateTimeToConvert) 
    { 
     int secsInAMin = 60; 
     int secsInAnHour = 60 * secsInAMin; 
     int secsInADay = 24 * secsInAnHour; 
     double secsInAYear = (int)365.25 * secsInADay; 

     int totalSeconds = (int)(dateTimeToConvert.Year * secsInAYear) + 
         (dateTimeToConvert.DayOfYear * secsInADay) + 
         (dateTimeToConvert.Hour * secsInAnHour) + 
         (dateTimeToConvert.Minute * secsInAMin) + 
         dateTimeToConvert.Second; 

     return totalSeconds; 
    } 

ben bir yılda saniye hesaplama kesiliyor olduğumu farkındayım ama kesin konuşmak gerekirse benim hesaplama gerekmez. Gerçekten saniyeler hesaplamak için kullandığım yöntemin doğru olup olmadığını bilmek istiyorum.

Bir DateTime nesnesinden verilen saniyeleri daha iyi hesaplayabilecek bir şey var mı?

Ayrıca, AD numarası 0'dan beri hesaplayacak olursam, C# olarak kodlanırsam, dönüş türü int64 olur mu?

+2

Üzgünüm, meraklı olsam da, neden tarih hesaplama araçları yerine saniyeleri karşılaştırıyorsunuz? – Marko

+0

Yukarıda belirtilen iki nesneden birinden saniye cinsinden verilen bir tamsayı olan bir değişkeni çıkarmaya çalışıyorum. – AndHeCodedIt

cevap

24

DateTime tip comparison operators destekler:

if (dateTimeA > dateTimeB) 
{ 
    ... 

Bu aynı zamanda DateTime.AddSeconds tarafından döndürülen DateTime değerleri için çalışır:

if (dateTimeA.AddSeconds(42) > dateTimeB) 
{ 
    ... 

gerçekten 01 yana geçen saniye sayısı isterseniz/01/0001 00:00:00, t arasındaki farkı hesaplayabilirsiniz. wo DateTime değerleri. Ortaya çıkan TimeSpan değeri TotalSeconds özelliği vardır: Amaç, iki tarih arasındaki saniye sayısını bulmakta ise

double result = DateTime.Now.Subtract(DateTime.MinValue).TotalSeconds; 
+0

+1 burada, bunu kullandım. Hızlı cevap için teşekkürler. – AndHeCodedIt

5

, sen TimeSpan nesnesini kullanarak çok daha iyi olurdu.

TimeSpan span = date2 - date1; 
double seconds = span.TotalSeconds; 
+0

Dikkat: TimeSpan.TotalSeconds istediğiniz TimeSpan.Seconds değil – dtb

+0

Lütfen, Saniye değil, TotalSeconds kullanın. Saniye, günler, saatler, dakikalar vb. Faktörleri katettikten sonra saniyenin kalanını temsil eder ... – rein

+0

Teşekkürler; sabit. Eğer karıştırılmış ve "toplam" fonksiyonların, bu birimlerin herhangi bir fraksiyonunu dahil etmenin aksine, kaç tane birim bulunduğunu düşünmüş olsaydı. – GendoIkari

4

2 DateTime nesnesini karşılaştırmak isterseniz, neden sağlanan operatörleri kullanmıyorsunuz? http://msdn.microsoft.com/en-us/library/aa326723%28v=VS.71%29.aspx

DateTime a, b; 
if (a > b) //a is after b 
+0

bu işe yarar (a.AddSeconds> b)? Sormamın nedeni, iki nesneden birinden çıkarmak zorunda kalacağım bir arabellek süremdir. Tampon süresi saniye cinsindendir. – AndHeCodedIt

+2

Evet, bunu yapabilirsiniz: DateTime.Now.AddSeconds (10)> otherDateTime – rein

+0

+1 Kullanacağım uygulama budur. – AndHeCodedIt

3

iki DateTime örneği arasında kesin bir fark elde etmek ZamanGeçişi sınıfını kullanırsınız.

DateTime dt1 = DateTime.Now; 
    DateTime dt2 = new DateTime(2003,4,15); 
    TimeSpan ts = dt1.Subtract(dt2); 

(yukarıdaki kod parçacığının ts) TimeSpan değeri mevcut olduğunda, doğru belirli bir saniye sayısı TimeSpan dönüştürmek değerlerini incelemek için: Burada bir örnektir. Aşağıdaki iplikten

+2

TimeSpan'ı saniye yerine çeviren ts.TotalSeconds değerini kullandığınızdan emin olun. Yalnızca saniye bileşeni olan saniye sayısı. –

6

Gerçekten saniyeye DateTime nesnesi dönüştürmek için bir anlam ifade etmiyor. Saniyeler uzun bir süre (TimeSpan) ile uğraşıyorsanız sadece anlamlıdır. Eğer aralarındaki saniye sayısını almak için iki tarihleri ​​karşılaştırmak istiyorsanız olmalı:

TimeSpan diff = DateTime.Now - PreviousDateTime; 
double seconds = diff.TotalSeconds; 
3

gerçekten datetime nesnesi için saniyede almak gerekir varsayarsak, doğrudan ondan "Keneler" özelliği alabilir. Bunlar saniyeler içinde değil ama Keneler'i saniyelere dönüştürmek için uygun faktöre kolayca bölebilirsiniz. Bkz: http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx

Yani, gibi bir şey:

 DateTime.Now.Ticks/TimeSpan.TicksPerSecond 
2

iki tarihsaat arasında geçen süre almak için bir TimeSpan kullanarak gitmek için en iyi yolu muhtemelen ama gerçekten sayısını almak istiyorsanız tsElapsed.TotalSeconds bir çift değil, bir Int olduğunu

DateTime dateTimeToConvert = DateTime.Now; 
TimeSpan tsElapsed = dateTimeToConvert - DateTime.MinValue; 
return tsElapsed.TotalSeconds; 

not: verilen DateTime saniye aşağıdaki gibi bir şey yapabilirdi.