265 votes

Comment puis-je représenter un temps seule valeur .NET?

Est-il est la façon dont on peut représenter un temps seule valeur .NET sans la date? Par exemple, en indiquant les temps d'ouverture d'une boutique?

TimeSpan indique une plage, alors que je ne veux stocker une valeur de temps. À l'aide de DateTime pour indiquer ce qui aboutirait à new DateTime(1,1,1,8,30,0) qui n'est pas vraiment souhaitable.

186voto

John G Points 641

Vous pouvez utiliser timespan

TimeSpan timeSpan = new TimeSpan(2, 14, 18);
Console.WriteLine(timeSpan.ToString());     // Displays "02:14:18".

[Modifier]
Considérant les autres réponses et de les modifier à la question, je serais encore à l'utilisation de Temps. Pas de point dans la création d'une nouvelle structure dans laquelle un existant dans le cadre suffire.
Sur ces lignes que vous finiriez dupliquer beaucoup de types de données natifs.

161voto

Jon Skeet Points 692016

Comme d'autres l'ont dit, vous pouvez utiliser un DateTime , et d'ignorer la date, ou utiliser un TimeSpan. Personnellement, je ne suis pas vif sur l'une de ces solutions, que ni le type reflète vraiment le concept que vous essayez de représenter - je considère les types date/heure .NET un peu comme sur les maigres côté qui est l'une des raisons pour lesquelles j'ai commencé à Noda Temps. Dans Noda Temps, vous pouvez utiliser l' LocalTime type de représenter un moment de la journée.

Une chose à prendre en compte: le moment de la journée n'est pas nécessairement la longueur de temps depuis minuit le même jour...

39voto

Rubens Farias Points 33357

Si ce vide Date vous dérange vraiment, vous pouvez également créer un simple Time structure:

struct Time
{
    public int Hours   { get; set; }
    public int Minutes { get; set; }
    public int Seconds { get; set; }
    public override string ToString()
    {  
        return String.Format(
            "{0:00}:{1:00}:{2:00}",
            this.Hours, this.Minutes, this.Seconds);
    }
}

Ou, pourquoi s'embêter: si vous n'avez pas besoin de faire un calcul avec cette information, il suffit de le stocker en tant que String.

21voto

bugfixr Points 2692

Je le dis d'utiliser un DateTime. Si vous n'avez pas besoin de la date de la partie, juste l'ignorer. Si vous avez besoin d'afficher juste le temps de l'utilisateur, la sortie formatée à l'utilisateur comme ceci:

DateTime.Now.ToString("t");  // outputs 10:00 PM

Il semble que tous les travaux supplémentaires à effectuer une nouvelle classe ou même en utilisant un laps de Temps est inutile.

2voto

Jason Williams Points 31901

Si vous ne souhaitez pas utiliser un DateTime ou de Temps, et vous voulez juste pour stocker le moment de la journée, vous avez juste à stocker les secondes depuis minuit dans un Int32, ou (si vous ne voulez même pas quelques secondes) l'minutes depuis minuit se situerait dans une Int16. Il serait trivial pour écrire quelques méthodes requis pour accéder à l'Heure, la Minute et la Seconde de ces valeurs.

La seule raison pour laquelle je peux penser à éviter DateTime/plage de Temps serait si la taille de la structure est essentielle.

(Bien sûr, si vous utilisez un système simple comme ci-dessus enveloppé dans une classe, alors il devrait également être facile à remplacer le stockage avec une plage de Temps à l'avenir si vous avez soudainement réaliser que vous donnerait un avantage)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X