将 DateTime.Now 转换为秒

Posted

技术标签:

【中文标题】将 DateTime.Now 转换为秒【英文标题】:Convert DateTime.Now to Seconds 【发布时间】:2011-05-05 19:39:38 【问题描述】:

我正在尝试编写一个函数,它将 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?

【问题讨论】:

对不起,如果我多管闲事,但您为什么要比较秒而不是内置日期计算工具? 我试图从上面提到的两个对象之一中减去一个以秒为单位的整数变量。 【参考方案1】:

DateTime 类型支持comparison operators:

if (dateTimeA > dateTimeB)

    ...

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

if (dateTimeA.AddSeconds(42) > dateTimeB)

    ...

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

如果目的是查找两个日期之间的秒数,最好使用TimeSpan 对象。

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

【讨论】:

注意:您需要 TimeSpan.TotalSeconds,而不是 TimeSpan.Seconds 请使用 TotalSeconds,而不是 Seconds。秒表示将天数、小时数、分钟数等因素考虑在内后剩余的秒数... 谢谢;固定的。如果混淆并认为“总”函数返回有多少完整单位,而不是包括这些单位的任何部分。 谢谢,这对我有帮助! :)【参考方案4】:

请参阅以下主题的建议:

How do I convert ticks to minutes?

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

【讨论】:

【参考方案5】:

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

所以,类似:

        DateTime.Now.Ticks/TimeSpan.TicksPerSecond

【讨论】:

【参考方案6】:

如果您想比较 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

【讨论】:

如果(a.AddSeconds > b)这会起作用吗?我问的原因是因为我有一个缓冲时间,我必须从两个对象之一中减去。缓冲时间以秒为单位。 是的,你可以这样做:如果 DateTime.Now.AddSeconds(10) > otherDateTime【参考方案7】:

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

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

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

【讨论】:

一个问题是确保使用 ts.TotalSeconds 将 TimeSpan 转换为秒而不是 ts.Seconds,后者只是秒组件。【参考方案8】:

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

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

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

【讨论】:

【参考方案9】:

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

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

    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;
    

【讨论】:

我清理了我的帖子......所以......请让我们开始投票吧! :D

以上是关于将 DateTime.Now 转换为秒的主要内容,如果未能解决你的问题,请参考以下文章

datetime处理日期和时间

在 Python 中,如何将 `datetime` 对象转换为秒?

datetime shutil xml collections模块

datetime处理日期和时间

将 DateTime.Now 转换为时间前 C# [重复]

DateTime.UtcNow.ToString() 和DateTime.Now.ToString()输出的字符为啥不一样呢?