将DateTime.Now转换为秒

问题描述 投票:15回答:9

我正在尝试编写一个函数,将DateTime.Now实例转换为它表示的秒数,以便我可以将它与另一个DateTime实例进行比较。这是我目前拥有的:

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对象给出的秒数?

另外,如果我要用C#编码,如果我要计算自0 AD以来的所有秒数,那么返回类型应该是int64吗?

c# .net .net-3.5 .net-4.0
9个回答
28
投票

DateTime类型支持comparison operators

if (dateTimeA > dateTimeB)
{
    ...

这也适用于DateTime返回的DateTime.AddSeconds值:

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

如果您确实需要自01/01/0001 00:00:00以来经过的秒数,则可以计算两个DateTime值之间的差异。由此产生的TimeSpan值具有TotalSeconds属性:

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

9
投票

将DateTime对象转换为秒确实没有意义。只有在处理一段时间(TimeSpan)时,秒才有意义。您是否要比较两个日期以获得它们之间的秒数:

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

6
投票

请参阅以下主题中的建议:

How do I convert ticks to minutes?

TimeSpan.FromTicks(DateTime.Now.Ticks).TotalSeconds; 

5
投票

如果目的是找到两个日期之间的秒数,那么使用TimeSpan对象会好得多。

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

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

4
投票

假设您确实需要获取datetime对象的秒数,您可以直接从中获取“Ticks”属性。这些不是几秒钟,但您可以轻松划分适当的因素,将Ticks转换为秒。见:http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx

所以,像:

        DateTime.Now.Ticks/TimeSpan.TicksPerSecond

3
投票

我会使用TimeSpan类来获取两个DateTime实例之间的确切差异。这是一个例子:

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

一旦TimeSpan值(上面的代码片段中的ts)可用,您可以检查其值以将TimeSpan正确转换为给定的秒数。


2
投票

使用TimeSpan来获取两个DateTime之间的经过时间可能是最好的方法,但是如果你真的想获得给定DateTime的秒数,你可以执行以下操作:

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

请注意,tsElapsed.TotalSeconds是Double,而不是Int。


0
投票

请注意,目标是获取自DateTime.MinVal(日历的第一天)以来的秒数。我这样说,因为我看到所有这些答案都是“你做这样的时间比较......加入对象,乘以那个对象并对它们进行交叉计算,除以求和结果的商,然后加速不是你问的。“

这里有一个非常简单的答案。刻度是100纳秒的增量。 DateTime object.Ticks是自1/1/0001以来发生的刻度数。即,零年。一秒钟就有1000万纳秒。所以...

    public static long convertDateTimeToSeconds(DateTime dateTimeToConvert) {
        // According to Wikipedia, there are 10,000,000 ticks in a second, and Now.Ticks is the span since 1/1/0001. 
        long NumSeconds= dateTimeToConvert.Ticks / 10000000;
        return NumSeconds;
    }
© www.soinside.com 2019 - 2024. All rights reserved.