Est-ce que .NET a une constante pour le nombre de secondes dans une journée (86400)? p>
9 Réponses :
Si vous souhaitez une lisibilité, vous pouvez utiliser:
(new TimeSpan(1,0,0,0)).TotalSeconds
Pas une constante, mais me laisse sortir de l'entreprise de deuxième comptage.
Cette réponse simple m'a fait repenser l'approche que je prenais. Ce n'est pas tout à fait le code que j'avais l'habitude de résoudre mon problème, mais je suis tout à fait de choisir une réponse basée sur la pêche qu'elle a enseignée plutôt que le poisson qu'il a fourni. Merci.
Ce n'est pas une valeur constante p>
Les secondes sautent ne sont pas le seul problème, des jours où les changements d'horaire d'économie de jour se produisent ont une heure de moins ou plus (comptant de 00: 00-24: 00) dans les fuseaux horaires.
Heureusement, dans environ 363/365 cas, 86400 suffisent. ;)
@Gaussz: C'est pourquoi vous devriez toujours stocker des horaires comme UTC.
Les secondes sautent ne sont toutefois pas utilisées dans la représentation Standard .NET DateTime. Donc, non pertinent pour toutes les applications spécialisées.
Le plus proche de votre aller à obtenir sans vous spécifier de vous-même:
public static Extensions { public static int SecondsPerDay( this System.TimeSpan ts ) { return System.TimeSpan.TicksPerDay / System.TimeSpan.TicksPerSecond } }
Je ne pense pas que cela a du sens comme une méthode d'extension. Probablement juste une classe d'utilité imo
Ce n'est pas une constante, le nombre de secondes d'une journée varie en fonction de la journée et du fuseau horaire. Ainsi, ce n'est pas quelque chose que Microsoft sera susceptible d'offrir. P>
Vous ne me direz pas qu'une journée en Arizona n'est pas la même 24 heures que c'est par ex. Singapour?
nombre de secondes dans un jour régulier em> est de 86400. Mais les jours où les changements de DST se produisent peuvent être plus courts ou plus longs. P>
Cependant, l'écriture 24 * 60 * 60 n'est pas une mauvaise pratique du tout, et il est fort probable d'être embarqué par le compilateur, aussi! P>
Il est réellement disponible dans le document .NET. Vous pouvez y arriver 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; } }
Eh bien, ça ne devrait pas être. Il gère en douceur la mise à jour .NET requise après la rotation de la Terre ralentit suffisamment.
tant d'effort que pour ne pas définir un const pour 60 x 60 x 24;) p>
double secondsPerDay = TimeSpan.FromDays(1).TotalSeconds; This was a comment from @ckarras. Adding it as an answer to make it more visible.
Si vous souhaitez une plus grande lisibilité de Smidgen que la réponse de Gaussz, vous pouvez utiliser:
TimeSpan.FromDays(1).TotalSeconds
Pourquoi ne pouvez-vous pas spécifier le vôtre? Ce n'est pas susceptible de changer de temps bientôt ...
Ayant vu les constantes System.Net.WebReQuestMethods.http (omniprésente, immuable et couramment utilisée - beaucoup comme des secondes_in_a_day), cela n'aurait pas surpris de moi si .NET aurait fourni quelque chose ici.
Oui, c'est
86400 code>. Ne l'utilisez pas, c'est un peu buggy et retourne toujours la valeur 86400, quelles que soient les secondes saut et les locales.
@ROB Sanders: J'écris un test de l'unité qui retourne un certain nombre de secondes et elle a traité des jours.
<3 donc. La boîte de dialogue sur cette question m'a vraiment fait repenser mon approche. Je n'ai pas besoin d'une constante, maintenant et que le code est plus propre et plus durable pour ne pas en avoir un. Les objets DateTime et Timespan m'ont donné tout ce dont j'ai besoin, vraiment.