2010-01-25 18 views
5

Est-ce que .NET a une constante pour le nombre de secondes dans une journée (86400)?. Constante NET pour le nombre de secondes dans une journée?

+8

Pourquoi ne pas spécifier le vôtre? Ce n'est pas susceptible de changer à tout moment ... –

+0

Ayant vu les constantes System.Net.WebRequestMethods.Http (omniprésentes, immuables et communément utilisées - un peu comme SECONDS_IN_A_DAY), je n'aurais pas été surpris si .NET aurait fourni quelque chose ici. – lance

+6

Oui, c'est '86400'. Ne l'utilisez pas cependant, c'est un peu bogué, et renvoie toujours la valeur 86400, indépendamment des secondes intercalaires et des paramètres régionaux. – Zano

Répondre

7

Si vous voulez la lisibilité, vous pouvez utiliser:

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

bien juste en utilisant votre propre const peut être plus clair :)

+0

Pas une constante, mais cela me laisse hors de l'entreprise de comptage secondaire. – lance

+2

Cette réponse simple m'a fait repenser l'approche que je prenais. Ce n'est pas tout à fait le code que j'ai utilisé pour résoudre mon problème, mais je suis tout à fait pour choisir une réponse basée sur la pêche qu'elle a enseignée plutôt que sur le poisson qu'elle a fourni. Je vous remercie. – lance

+8

Encore plus lisible: TimeSpan.FromDays (1) .TotalSeconds – ckarras

21

Ce n'est pas une valeur constante

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

+4

C'est inattendu :) –

+4

Les secondes sautées ne sont pas le seul problème, les jours où les changements de l'heure d'été se produisent ont une heure de moins ou plus (à compter de 00: 00-24: 00) dans les fuseaux horaires correspondants. – GaussZ

+1

Heureusement, dans environ 363/365 cas, 86400 est assez bon.;) –

2

le plus proche de votre va obtenir w/o spécifiant que vous possédez:

System.TimeSpan.TicksPerDay/System.TimeSpan.TicksPerSecond 

vous pouvez même envelopper cela comme une méthode d'extension ...

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

Il n'est pas une constante, le nombre de secondes dans une journée varie en fonction du jour et le fuseau horaire. Ce n'est donc pas quelque chose que Microsoft est susceptible d'offrir.

+1

vous ne me direz pas qu'un jour en arizona n'est pas le même 24 heures comme c'est le cas par exemple. singapour? – Kai

5

Nombre de secondes dans un normal le jour est 86400. Mais les jours où les changements d'heure d'été peuvent se produire peuvent être plus courts ou plus longs. Cependant, écrire 24 * 60 * 60 n'est pas une mauvaise pratique du tout, et il est fort probable que le compilateur l'utilisera également!

2

Il est actuellement disponible dans le framework .NET. Vous pouvez l'obtenir comme ceci:

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

Veuillez ne pas l'utiliser.

+0

Ça ne me ressemble pas ... :) – stakx

+1

Eh bien, ça ne devrait pas l'être. Il gère en douceur la mise à jour .NET requise après que la rotation de la Terre ait suffisamment ralenti. –

3

tant d'effort juste pour ne pas définir un const pour 60 x 60 x 24;)

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

C'était un commentaire de @ckarras. L'ajouter comme une réponse pour le rendre plus visible.