【问题标题】:.NET constant for number of seconds in a day?.NET 常量一天中的秒数?
【发布时间】:2011-01-09 08:03:11
【问题描述】:

.NET 是否有一个常数表示一天中的秒数(86400)?

【问题讨论】:

  • 为什么不能自己指定?它不太可能很快改变......
  • 看到 System.Net.WebRequestMethods.Http 常量(无处不在、不变且常用——很像 SECONDS_IN_A_DAY),如果 .NET 在这里提供了一些东西,我不会感到惊讶。
  • 是的,它是86400。不过不要使用它,它有一点问题,并且无论闰秒和语言环境如何,它总是返回值 86400。
  • @Rob Sanders:我正在编写一个返回秒数的单元测试,并在几天内完成。

标签: .net constants seconds


【解决方案1】:

这不是一个常数值

http://en.wikipedia.org/wiki/Leap_second

【讨论】:

  • 闰秒不是唯一的问题,在相应的时区发生夏令时更改的日子有一个小时或更多(从 00:00-24:00 计算)。
  • 幸运的是,在大约 363/365 的情况下,86400 已经足够了。 ;)
  • @GaussZ:这就是为什么您应该始终将时间存储为 UTC。
  • 闰秒并没有在标准的 .NET DateTime 表示中使用。除了专门的应用程序之外,其他所有应用程序都无关紧要。
【解决方案2】:

如果你想要可读性,你可以使用:

(new TimeSpan(1,0,0,0)).TotalSeconds

虽然只使用你自己的 const 可能会更清楚:)

【讨论】:

  • 不是一个常数,但让我无法进行二次计算。
  • 这个简单的答案让我重新思考了我所采用的方法。这不是我用来最终解决我的问题的代码,但我完全赞成根据它教的钓鱼而不是它提供的鱼来选择答案。谢谢。
【解决方案3】:

常规天的秒数是 86400。但 DST 发生变化的天数可能更短或更长。

不过,写成 24*60*60 一点也不坏,而且很可能也被编译器内联了!

【讨论】:

    【解决方案4】:
    double secondsPerDay = TimeSpan.FromDays(1).TotalSeconds;
    

    这是来自@ckarras 的评论。将其添加为答案以使其更明显。

    【讨论】:

      【解决方案5】:

      为了不为 60 x 60 x 24 定义 const 付出了这么多努力;)

      【讨论】:

        【解决方案6】:

        在不指定您拥有的情况下最接近您的目标:

        System.TimeSpan.TicksPerDay / System.TimeSpan.TicksPerSecond
        

        您甚至可以将其包装为扩展方法...

        public static Extensions
        {
           public static int SecondsPerDay( this System.TimeSpan ts )
           {
              return   System.TimeSpan.TicksPerDay / System.TimeSpan.TicksPerSecond
           }
        }
        

        【讨论】:

        • 我认为这作为一种扩展方法没有意义。可能只是一个实用程序类imo
        【解决方案7】:

        它实际上在 .NET 框架中可用。你可以像这样得到它:

        using System;
        using System.Reflection;
        
        public static class DateTimeHelpers {
          public static int GetSecondsPerDay() {
            object obj = typeof(DateTime).GetField("MillisPerDay", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null);
            return (int)obj / 1000;
          }
        }
        

        请不要使用它。

        【讨论】:

        • 嗯,不应该。在地球自转速度足够慢后,它可以顺利处理所需的 .NET 更新。
        【解决方案8】:

        这不是一个常数,一天中的秒数取决于日期和时区。因此,这不是微软可能提供的东西。

        【讨论】:

        • 你不会告诉我,在亚利桑那州的一天与在美国的 24 小时不一样。新加坡?
        【解决方案9】:

        如果您想要比 GaussZ 的答案更具可读性,您可以使用:

        TimeSpan.FromDays(1).TotalSeconds
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-15
          • 2019-07-28
          • 2012-12-31
          • 2014-07-28
          • 1970-01-01
          • 2010-09-30
          • 2012-02-25
          • 1970-01-01
          相关资源
          最近更新 更多