6
votes

.NET Constante pour le nombre de secondes dans une journée?

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


5 commentaires

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 . 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.


9 Réponses :


9
votes

Si vous souhaitez une lisibilité, vous pouvez utiliser:

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


2 commentaires

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.



20
votes

Ce n'est pas une valeur constante

http://fr.wikipedia.org/wiki/leap_second


4 commentaires

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.



4
votes

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


1 commentaires

Je ne pense pas que cela a du sens comme une méthode d'extension. Probablement juste une classe d'utilité imo



2
votes

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.


1 commentaires

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?



5
votes

nombre de secondes dans un jour régulier est de 86400. Mais les jours où les changements de DST se produisent peuvent être plus courts ou plus longs.

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!


0 commentaires

3
votes

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


1 commentaires

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.



4
votes

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


0 commentaires

5
votes
double secondsPerDay = TimeSpan.FromDays(1).TotalSeconds;
This was a comment from @ckarras.  Adding it as an answer to make it more visible.

0 commentaires

0
votes

Si vous souhaitez une plus grande lisibilité de Smidgen que la réponse de Gaussz, vous pouvez utiliser:

TimeSpan.FromDays(1).TotalSeconds


0 commentaires