129 votes

Un type pour Date uniquement en C # - pourquoi n'y a-t-il pas de type Date?

Dans notre projet C# nous avons besoin pour la représentation d'une date, sans un temps. Je connais l'existence de l'DateTime, toutefois, il intègre un moment de la journée. Je tiens à rendre explicite le fait que certaines variables et la méthode-les arguments sont à base de dattes. Donc je ne peux pas utiliser l' DateTime.Date de la propriété

Quelles sont les approches à ce problème? Je ne suis sûrement pas le premier à rencontrer ce? Pourquoi n'est-il pas Date classe en C#?

Quelqu'un aurait-il une belle mise en œuvre à l'aide d'un struct et peut-être quelques extensionmethods DateTime et peut-être la mise en œuvre de certains opérateurs tels que == et <, > ?

52voto

TheMathemagician Points 549

Je voulais juste dire que l'absence d'une classe date EST une grosse affaire et à l'aide de DateTime pas bon du tout. Dès que vous stockez vos "dates" comme date-heure vous êtes l'otage locale/fuseau horaire tuer n'est pas jouer d'épargne questions. Jeter la partie peut envoyer tous vos remonte un jour, lorsque les horloges changer(!). Et les utilisateurs dans les différents fuseaux horaires pourrez voir les différentes dates quand ils essaient de convertir la date et l'heure. La Date et l'heure sont bien pour le représentant des moments précis dans le temps (jiffies à partir d'un certain point ou quoi que ce soit), mais ils sont très impropre pour la représentation d'un résumé de la date.

14voto

Robert MacLean Points 18288

Je soupçonne qu’il n’existe pas de classe pure Date parce que vous avez déjà DateTime qui peut le gérer. Avoir Date conduirait à la duplication et à la confusion.

Si vous souhaitez une approche standard, examinez la propriété DateTime.Date qui donne uniquement la date d'un DateTime avec la valeur de l'heure définie sur 12:00:00 minuit (00:00:00 ).

14voto

MVCDS Points 96

Je l'ai envoyé par courriel refsrcfeedback@microsoft.com et c'est leur réponse

Marcos, ce n'est pas un bon endroit pour poser ce genre de questions. Essayez http://stackoverflow.com Réponse courte est que vous avez besoin d'un modèle pour représenter un point dans le temps, DateTime et de fait, il est le plus utile scénario dans la pratique. Le fait que les humains utilisent deux concepts (date et heure) pour marquer le plus de points dans le temps est arbitraire et pas utile de se séparer.

Seulement découpler où elle est nécessaire, ne pas faire des choses juste pour le plaisir de faire les choses à l'aveuglette. Pensez-y de cette façon: quel problème avez-vous qui est résolu par la division d'DateTime dans la Date et l'Heure? Et quels problèmes vous obtenez ce que vous n'avez pas maintenant? Astuce: si vous regardez DateTime usages à travers le .NET framework: http://referencesource.microsoft.com/#mscorlib/system/datetime.cs#df6b1eba7461813b#references Vous verrez que la plupart sont retournés à partir d'une méthode. Si nous n'avions pas un seul concept comme DateTime, vous devez utiliser les paramètres de sortie ou Tuples retourner une paire de la Date et de l'Heure.

HTH, Kirill Osenkov

Dans mon mail, je l'avais demandé si c'était parce que DateTime utilise TimeZoneInfo pour obtenir le temps de la machine - en Maintenant à la bienséance. Donc, je dirais que c'est parce que c'est trop couplés, ils ont confirmé que pour moi.

10voto

Clay Points 1060

J'ai créé une structure de date simple pour les moments où vous avez besoin d'une date simple sans vous soucier de la portion de temps, des fuseaux horaires, du lieu local par rapport à l'utc, etc.

https://github.com/claycephus/csharp-date

2voto

Jason Points 125291

Pourquoi? Nous ne pouvons que spéculer et cela n’aide pas beaucoup à résoudre les problèmes d’ingénierie. Une bonne hypothèse est que DateTime contient toutes les fonctionnalités qu'une telle structure aurait.

Si cela vous importe vraiment, encapsulez DateTime dans votre propre structure immuable qui n’expose que la date (ou regardez la propriété DateTime.Date ).

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