Je travaille sur un programme qui nécessite la date d'un événement pour être retourné.
Je recherche un Date
, pas un DateTime
.
Existe-t-il un type de données qui renvoie uniquement la date?
Non, il n'y en a pas. DateTime
représente un point dans le temps composé d'une date et d'une heure. Cependant, vous pouvez récupérer la partie de date via la Date
propriété (qui en est une autre DateTime
avec l'heure définie sur00:00:00
).
Et vous pouvez récupérer des propriétés de date individuelles via Day
, Month
et Year
.
J'ai créé une structure de date simple pour les moments où vous avez besoin d'une date simple sans vous soucier de la partie horaire, des fuseaux horaires, du local ou de l'utc, etc.
Date today = Date.Today;
Date yesterday = Date.Today.AddDays(-1);
Date independenceDay = Date.Parse("2013-07-04");
independenceDay.ToLongString(); // "Thursday, July 4, 2013"
independenceDay.ToShortString(); // "7/4/2013"
independenceDay.ToString(); // "7/4/2013"
independenceDay.ToString("s"); // "2013-07-04"
int july = independenceDay.Month; // 7
Malheureusement, pas dans le .Net BCL. Les dates sont généralement représentées sous la forme d'un objet DateTime avec l'heure définie sur minuit.
Comme vous pouvez le deviner, cela signifie que vous avez tous les problèmes de fuseau horaire associés, même si pour un objet Date, vous ne voudriez absolument pas de gestion de fuseau horaire.
la source
date
de n'importe quoi est une mauvaise idée, à moins que vous ne soyez sûr à 100% que votre application ne fonctionnera que dans un seul fuseau horaire. Tout enregistrer commedatetime
vous donne le meilleur des deux mondes, y compris le plus critique, un moyen simple d'éviter les cauchemars de fuseau horaire si la configuration du fuseau horaire de votre serveur change un jour ... et commence à écrire des données d'une manière que vous n'aviez pas anticipée.Datetime
peut vous y sauver,date
ne peut pas du tout, et deviendra extrêmement difficile à réparer si jamais vous commencez à écriredate
avec le mauvais contexte de fuseau horaire.Créez une classe wrapper. Quelque chose comme ça:
Et exposez tout
value
ce que vous voulez.la source
DateTimeKind.Unspecified
afin que, lorsqu'il est sérialisé, il soit désérialisé sans conversion (peut changer la date en fonction de différents fuseaux horaires).DateTimeKind.Utc
. Ne le définissez pas surDateTimeKind.Unspecified
car cela garantira qu'il sera sérialisé / désérialisé avec un décalage de fuseau horaire inclus! Une date du calendrier est la même quel que soit le fuseau horaire, alors ne laissez pas le système l'ajuster.Le type Date est juste un alias du type DateTime utilisé par VB.NET (comme int devient Integer). Ces deux types ont une propriété Date qui vous renvoie l'objet avec la partie heure définie sur 00:00:00.
la source
DateTime a une propriété Date que vous pouvez utiliser pour isoler la partie date. La méthode ToString fait également un bon travail en affichant uniquement la partie Date lorsque la partie heure est vide.
la source
L'objet DateTime a une propriété qui renvoie uniquement la partie date de la valeur.
la source
DateTime
avec l'heure réglée à 0:00:00Il n'y a pas
Date
DataType.Cependant vous pouvez utiliser
DateTime.Date
pour obtenir uniquement la date.PAR EXEMPLE
la source
DateTime.Now.Date
est le même queDateTime.Today
. Il y a unDateTime.UtcNow
qui renvoie la valeur date-heure comme temps universel (UTC), mais il n'y a pas de méthode ou de propriété équivalente UTC pour Today;DateTimeKind.UtcNow.Date
est l'expression appropriée.Vous pouvez renvoyer DateTime où la partie heure est 00:00:00 et simplement l'ignorer. Les dates sont gérées comme des entiers d'horodatage, il est donc logique de combiner la date avec l'heure car elle est de toute façon présente dans l'entier.
la source
Pour cela, vous devez utiliser la date, mais ignorer la valeur de l'heure.
Normalement, une date serait un DateTime avec une heure de
00:00:00
Le
DateTime
type a une.Date
propriété qui renvoie leDateTime
avec la valeur de temps définie comme ci-dessus.la source
la source
Vous pouvez essayer l’une des solutions suivantes:
Mais il n'y a pas de type "Date" dans la BCL.
la source