2010-05-08 6 views
1

J'ai une colonne dans mon datatable qui est de type DateTime. Je veux seulement le DatePart, par conséquent quand j'utilise le ToShortDateTimeString il convertit en date courte mais de type de chaîne. Par conséquent, lorsque je réaffecte la chaîne à la colonne du datatable, elle ajoute de nouveau 12:00:00 à celle-ci. Je ne peux pas changer le type de colonne dans mon datatable. Est-il possible de convertir DateTime en ShortDateTime directement sans convertir en chaîne ?????Comment faire pour convertir DateTime en shortdatetime en C#?

+0

est-ce que vous corriger vous cherchez un type de données qui contient juste la date du calendrier et non le temps d'horloge? C'est comme ça que je lis la première révision. –

+0

... cuz 'rep est rare avec l'afflux de nouveaux utilisateurs sur ce site et nous attendons comme une meute de loups affamés pour attaquer le problème ... Je vais déjeuner maintenant. Si vous pouviez attendre jusqu'au 8 mai 2010 à 15 h 15, heure normale de l'Est pour clarifier que ce serait bien et synchroniser avec mon emploi du temps, sinon sans la partie horaire de la date, je ne saurai pas quand retourner et fournir le droit répondre :) –

+0

ouais votre rite. Je veux seulement la date et non la partie temps. Je lie la datatable à un gridview. Cela signifie donc que la seule option est de manipuler les données dans l'événement rowdatabound. Je pense que l'explication de Guffa est correcte. Faites-moi savoir s'il y a une autre solution? –

Répondre

2

Vous pouvez utiliser le .Date property, comme ceci:

DateTime.Now.Date //just the date portion, like DateTime.Today would give 

Si vous voulez formater sur l'écran, par exemple dans un GridView, vous pouvez ajouter le format à votre colonne en utilisant the DataFormatString property, comme ceci:

<asp:BoundField DataField="ColumnName" DataFormatString="{0:yyyy-MM-dd}" HtmlEncode="false" /> 
+0

désolé bro il ne fonctionne pas –

+0

Il intègre également la partie de temps - apparemment la question veut que le composant temps a disparu? –

+0

@Abhishek - Je suis confus par votre question alors, la partie temps est une partie fondamentale du type 'DateTime' ... vous ne pouvez pas stocker ce type sans un temps, tout ce que vous pouvez faire est de l'ignorer lors de l'affichage. –

3

Non, cela est impossible. Le formater en une chaîne n'aide pas non plus.

Le type datetime dans la base de données contient toujours un composant date et heure. Si vous ne spécifiez pas le composant heure, il devient 00:00:00 (ou 12:00:00 AM au format 12 heures). Donc, quoi que vous fassiez pour essayer de supprimer le compontent du temps, il en aura toujours un.

Notez que la valeur datetime de la base de données n'a pas de format. C'est juste une valeur représentant un point dans le temps. Par conséquent, vous devez prendre soin des données chaque fois que vous lisez à partir de la base de données. Si vous utilisez simplement les paramètres par défaut pour mettre en forme la valeur de la date dans une chaîne, vous obtiendrez les composants date et heure, car ils sont toujours présents. Vous devez spécifier le format que vous souhaitez lors de la conversion de la valeur DateTime en une chaîne pour l'affichage. Par exemple:

string formatted = theDateTimeValue.ToString("yyyy-MM-dd"); 
+0

Je lie la datatable à un gridview. Donc, cela signifie que la seule option est de manipuler les données dans l'événement rowdatabound ?? –

+0

@Abhishek: Vous devriez pouvoir spécifier un format lors de la liaison du champ à une colonne de grille, quelque chose comme ce que Nick a ajouté à sa réponse. L'utilisation d'un événement RowDataBound fonctionnerait également, ce qui vous donne également la possibilité de faire ce que vous voulez avec la valeur avant de la formater. – Guffa

3

Si vous traitez avec DataGrids ou GridViews, en format de colonne de date à l'aide de {0: d}, simple ou D. Si vous êtes sur le web et en utilisant ITemplate avec table, tr et td et en utilisant la liaison modèle comme <% # Eval()%> vous essayez ce qui suit

<span><%#string.Format("{0:d}",Eval("DataTableFieldName"))%></span> 
Questions connexes