2009-12-29 5 views
2

Je ne peux pas croire combien de temps il m'a fallu pour échouer à trouver la réponse à cette question apparemment évidente.Comment convertir un DateTime en Date en C#

Date SomeRandomMadeUpDate = DateTime.Now.AddMonths(randomMonths).Date; 

Cannot implicitly convert type 'System.DateTime' to 'System.Date' I can even call:

Date.Now 

mais appelant .AddDays sur elle retourne un DateTime.

Encore une fois, la question est: Comment puis-je transformer un C# DateTime en C# Date

Répondre

3

je devais le chercher, parce que je n » Je sais qu'il y avait un Date-type dans .NET 4.0, mais apparemment il y en a un dans System.Dataflow.dll. Il suffit d'utiliser le constructeur, avec le DateTime comme argument:

Date d = new Date(dt); 
+0

Yep. Bon travail décisif, et merci beaucoup. Maintenant j'en sais plus! – thepaulpage

11

Il n'y a pas de type "Date" en tant que tel. Tout est DateTimes. C'est juste que lorsque vous appelez .Date, vous obtenez ce DateTime à minuit ce jour-là.

Si vous parlez du type de données "Date" dans VB.NET, c'est la même chose que DateTime, croyez-le ou non.

+2

Alors pourquoi ai-je l'erreur que je reçois? – thepaulpage

+0

Aucune idée, je viens de l'essayer en VB et cela fonctionne sans aucun problème ... –

+0

Je l'ai essayé en C# et il n'y a pas de type System.Date ... –

10

.NET n'a pas un type représentant juste une date - ce sont des problèmes comme celui-ci qui m'ont fait démarrer Noda Time (qui n'est même pas encore prêt pour la production).

DateTime.Date renvoie une autre DateTime avec la même date que l'original, mais à minuit. C'est essentiellement le plus proche, il est à un type Date dans .NET :(Notez que si vous voulez la date d'aujourd'hui alors DateTime.Today est un moyen plus simple d'appeler DateTime.Now.Date.

Je ne sais pas pourquoi le compilateur donne une erreur message qui suggère qu'il est un type System.Date - il ne fait pas sur ma machine:

using System; 

class Test 
{ 
    static void Main() 
    { 
     Date today = DateTime.Now.Date; 
    } 
} 

donne cette erreur:

Test.cs(7,9): error CS0246: The type or namespace name 'Date' could not be found (are you missing a using directive or an assembly reference?)

Pouvez-vous donner un programme similaire court mais complet qui montre le message d'erreur que vous obtenez? Avez-vous une autre bibliothèque référencée qui est-ce que a un type System.Date? (Comme Tommy Carlier suggère, peut-être System.Dataflow?)

+1

System.Dataflow.dll (partie de SQL Server Modeling) a un type System.Date. –

+3

@Tommy: C'était ma suspicion (voir edit :) - c'est franchement horrible. Quelque chose qui est spécifique à SQL Server ne devrait pas contribuer à l'espace de noms 'System' :( –

+0

@Tommy: disons que ce n'est pas le cas –

1

Essayez de faire ce qui suit

string onlyDate = DateTime.Now.ToString("dd/MM/yyyy"); 

Ceci renvoie la date comme une chaîne, donc je pense que vous pouvez l'utiliser comme

Questions connexes