2010-11-05 58 views
12

我想寫一個函數,將一個DateTime.Now實例轉換爲它代表的秒數,以便我可以將它與另一個DateTime實例進行比較。以下是我目前有:轉換DateTime.Now到秒

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

我知道我是截斷計算秒的一年,但我不需要我的計算要精確。我真的很想知道我用來計算秒數的方法是否正確。

有沒有人有更好的計算DateTime對象的秒數?

另外,如果我要計算從0 AD開始的所有秒數,那麼返回類型是否應該是int64?

+2

對不起,如果我很香,但你爲什麼比較秒而不是內置的日期計算工具? – Marko 2010-11-05 20:34:24

+0

我想從上面提到的兩個對象之一中減去一個以秒爲單位給出的整數的變量。 – AndHeCodedIt 2010-11-05 20:45:09

回答

24

DateTime類型支持comparison operators

if (dateTimeA > dateTimeB) 
{ 
    ... 

這也適用於由DateTime.AddSeconds返回DateTime值:

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

如果你真的想因爲01所經過的秒數/ 01/0001 00:00:00,你可以計算出t wo日期時間值。得到的TimeSpan值具有TotalSeconds屬性:

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

+1在這裏,我使用了這個。感謝您的快速回答。 – AndHeCodedIt 2010-11-05 20:52:54

5

如果目的是找到秒鐘兩個日期之間的數,你會好得多使用TimeSpan對象。

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

注意:您需要TimeSpan.TotalSeconds,而不是TimeSpan.Seconds – dtb 2010-11-05 20:37:22

+0

請使用TotalSeconds,而不是Seconds。秒錶示一旦你計算天數,小時數,分鐘數等,秒的剩餘秒數...... – rein 2010-11-05 20:37:42

+0

謝謝;固定。如果混淆起來,並認爲「總計」功能返回了整個單位的數量,而不是包括這些單位的任何部分。 – GendoIkari 2010-11-05 20:40:22

4

如果要比較2個DateTime對象,爲什麼不使用提供的運算符? http://msdn.microsoft.com/en-us/library/aa326723%28v=VS.71%29.aspx

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

這將工作如果(a.AddSeconds> b)?我想問的原因是因爲我有一個緩衝時間,我不得不從兩個對象之一中減去。緩衝時間以秒爲單位。 – AndHeCodedIt 2010-11-05 20:38:51

+2

是的,你可以這樣做:if DateTime.Now.AddSeconds(10)> otherDateTime – rein 2010-11-05 20:46:49

+0

+1這是我將要使用的實現。 – AndHeCodedIt 2010-11-05 20:53:32

3

我會用時間跨度類來獲得兩個日期時間實例之間的確切差異。下面是一個例子:

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

一旦TimeSpan值(ts,在上面的代碼段)是可用的,則可以檢查其值提供給時間跨度正確地轉換爲以秒的給定數目。

+2

一個捕獲確保使用ts.TotalSeconds將TimeSpan轉換爲秒,而不是ts.Seconds,它只是秒組件。 – 2010-11-05 20:39:23

6

這真的沒有意義的DateTime對象轉換爲秒。秒只有在處理一段時間(TimeSpan)時纔有意義。如果要比較兩個日期,讓他們之間的秒數:

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

假設你真的需要得到的秒DateTime對象,你可以直接從它那裏得到了「蜱」屬性。這些不是在幾秒鐘內,但你可以很容易地通過適當的因素來分割,以便將Ticks轉換爲秒。 見:http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx

所以,像這樣:

 DateTime.Now.Ticks/TimeSpan.TicksPerSecond 
2

使用時間跨度,以獲得兩個日期時間之間所經過的時間可能是最好的方式,但如果你真的想要得到的數對於一個給定的DateTime秒,你可以這樣做以下:

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

注意tsElapsed.TotalSeconds是一種雙,而不是一個int。