2010-01-25 2 views
5

.NET ha una costante per il numero di secondi in un giorno (86400)?Costante di .NET per il numero di secondi in un giorno?

+8

Perché non è possibile specificare il proprio? Non è probabile che cambi presto ... –

+0

Dopo aver visto le costanti System.Net.WebRequestMethods.Http (onnipresente, immutabile e comunemente usato - proprio come SECONDS_IN_A_DAY), non mi avrebbe sorpreso se .NET avesse fornito qualcosa qui. – lance

+6

Sì, è '86400'. Non lo uso però, è un po 'buggato, e restituisce sempre il valore 86400, indipendentemente dal secondo e dalle impostazioni internazionali. – Zano

risposta

7

Se si vuole migliorare la leggibilità è possibile utilizzare:

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

se usando solo il proprio const potrebbe essere più chiaro :)

+0

Non una costante, ma mi lascia fuori dal business del secondo conteggio. – lance

+2

Questa semplice risposta mi ha fatto ripensare all'approccio che stavo prendendo. Non è proprio il codice che ho usato per risolvere il mio problema, ma sono tutto per scegliere una risposta basata sulla pesca che ha insegnato piuttosto che sul pesce che ha fornito. Grazie. – lance

+8

Ancora più leggibile: TimeSpan.FromDays (1) .TotalSeconds – ckarras

21

Non è un valore costante

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

+4

Questo è inaspettato :) –

+4

I secondi di ritardo non sono l'unico problema, i giorni in cui le modifiche dell'ora legale si verificano hanno un'ora in meno o più (il conteggio da 00: 00-24: 00) nei tempi previsti. – GaussZ

+1

Fortunatamente, in circa 363/365 casi, 86400 è abbastanza buono.;) –

2

più vicino la vostra andando a ottenere w/o specificando il proprio:

System.TimeSpan.TicksPerDay/System.TimeSpan.TicksPerSecond 

si potrebbe anche avvolgere questo come un metodo di estensione ...

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

E non è una costante, il numero di secondi in un giorno varia a seconda del giorno e il fuso orario. Quindi non è qualcosa che Microsoft probabilmente offrirà.

+1

non mi dirai che un giorno in arizona non è la stessa lunga 24 ore che è in, ad es. Singapore? – Kai

5

Numero di secondi in un normale giorno è 86400. Ma i giorni in cui i cambiamenti di ora legale possono accadere possono essere più brevi o più lunghi.

Tuttavia, scrivere 24 * 60 * 60 non è affatto una cattiva pratica, ed è molto probabile che sia anche in-line dal compilatore!

2

In realtà è disponibile nel framework .NET. È possibile ottenere in questo modo:

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

Si prega di non usare quello.

+0

Non sembra una costante per me ... :) – stakx

+1

Beh, non dovrebbe essere. Gestisce agevolmente l'aggiornamento .NET richiesto dopo che la rotazione della Terra rallenta abbastanza. –

3

tanta fatica solo per non definire un const per 60 x 60 x 24;)

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

Questo è stato un commento da @ckarras. Aggiungendolo come risposta per renderlo più visibile.