2010-01-25 8 views
5

¿Tiene .NET una constante por el número de segundos en un día (86400)?.NET constante por el número de segundos en un día?

+8

¿Por qué no puedes especificar la tuya? No es probable que cambie pronto ... –

+0

Al haber visto las constantes de System.Net.WebRequestMethods.Http (omnipresentes, invariables y de uso común, al igual que SECONDS_IN_A_DAY), no me habría sorprendido si .NET tuviera proporcionado algo aquí. – lance

+6

Sí, es '86400'. No lo use, sin embargo, tiene errores y siempre devuelve el valor 86400, independientemente de los segundos intercalares y la configuración regional. – Zano

Respuesta

7

Si desea legibilidad puede usar:

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

aunque sólo usar su propio const podría ser más claro :)

+0

No es una constante, pero me deja fuera del negocio del segundo conteo. – lance

+2

Esta respuesta simple me hizo repensar el enfoque que estaba tomando. No es exactamente el código que utilicé para resolver finalmente mi problema, pero estoy a favor de elegir una respuesta basada en la pesca que enseñó en lugar del pescado que proporcionó. Gracias. – lance

+8

Aún más legible: TimeSpan.FromDays (1) .TotalSeconds – ckarras

21

No es un valor constante

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

+4

Eso es inesperado :) –

+4

Los segundos bisiestos no son el único problema, los días en que se producen cambios en el horario de verano tienen una hora o menos (contando desde 00: 00-24: 00) en las zonas horarias correspondientes. – GaussZ

+1

Afortunadamente, en aproximadamente 363/365 casos, 86400 es lo suficientemente bueno.;) –

2

más cercana a su va a llegar sin especificar su propiedad:

System.TimeSpan.TicksPerDay/System.TimeSpan.TicksPerSecond 

que incluso podría terminar con esto como un método de extensión ...

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

No es una constante, el número de segundos en un día varía según el día y la zona horaria. Por lo tanto, no es algo que Microsoft pueda ofrecer.

+1

no me dirá que un día en Arizona no es las mismas 24 horas que en, por ejemplo, Singapour? – Kai

5

Número de segundos en un normal día es 86400. Pero los días en que ocurren los cambios de horario de verano pueden ser más cortos o más largos.

Sin embargo, escribir 24 * 60 * 60 no es una mala práctica en absoluto, ¡y es muy probable que también esté alineado por el compilador!

2

Está realmente disponible en .NET framework. Se puede llegar a ella de esta manera:

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

Por favor, no use eso.

+0

No me parece una constante ... :) – stakx

+1

Bueno, no debería ser así. Controla sin problemas la actualización de .NET necesaria después de que la rotación de la Tierra se ralentiza lo suficiente. –

3

tanto esfuerzo no sólo para definir una constante de 60 x 60 x 24;)

2
double secondsPerDay = TimeSpan.FromDays(1).TotalSeconds; 

Este fue un comentario de @ckarras. Agregándolo como una respuesta para hacerlo más visible.

Cuestiones relacionadas