2010-11-05 95 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。