2010-12-11 35 views
10

J'essaie de créer une chaîne à partir de l'objet DateTime qui donne le format mm:dd:yyyy.Supprimer heures: secondes: millisecondes dans l'objet DateTime

Classiquement l'objet DateTime vient comme mm:dd:yyyy hrs:min:sec AM/PM.

Y at-il un moyen de supprimer rapidement la partie hrs:min:sec AM/PM du DateTime de sorte que lorsque je le convertis ToString() il se traduira seulement par mm:dd:yyyy?

+0

sais que vous avez obtenu une bonne réponse :) Je voulais juste vous donner un pourboire de cette page: http://msdn.microsoft.com/en-us/library/az4se3k1(v=VS.100).aspx C'est un gre à la ressource pour le formatage de date que j'utilise habituellement :) – Mantisen

+3

* Classiquement, l'objet DateTime est en mm: jj: aaaa heures: min: sec AM/PM. * - Non, il ne le fait pas. Ce serait une décision de conception ** horrible si c'était le cas! Je pense que vous oubliez que la sortie de DateTime.ToString dépend de votre culture actuelle. –

Répondre

10

Pour répondre à votre question, non - vous devriez le stocker dans un type différent. Le choix le plus simple est d'utiliser une chaîne. Cependant, je vous déconseille vivement de stocker des dates en interne dans votre programme sous forme de chaînes. Cela rendra difficile tout calcul ou toute comparaison. En outre, je vous déconseille de forcer une culture spécifique pour votre représentation de la date car cela signifie que votre application ne fonctionnera probablement pas comme prévu dans d'autres cultures que la vôtre.

Une approche légèrement plus sophistiquée consiste à créer une classe personnalisée qui remplace ToString. J'éviterais aussi cela, car il sera toujours difficile d'utiliser votre type avec les fonctions de la bibliothèque standard. Vous devrez convertir d'avant en arrière tout le temps. Laissez-le simplement en tant que DateTime et effectuez la conversion en chaîne uniquement dans la couche de présentation.

Vous pouvez utiliser DateTime.ToShortDateString pour imprimer une chaîne compatible avec la culture conviviale.

+0

L'OP a dit qu'il créait une chaîne, donc je pense que vous auriez dû dire Oui, dans votre réponse :-D – inspite

+0

J'aime cette solution car j'en ai besoin comme une chaîne lors de l'interrogation d'un service web extérieur :) – locoboy

+0

N'essayez pas de convertir un datetime en chaîne pour le manipuler! C'est une mauvaise forme et beaucoup plus lente que la construction de la date actuelle à partir de ses composants. – Dave

6
DateTime date1 = new DateTime(2008, 6, 1, 7, 47, 0); 
Console.WriteLine(date1.ToString()); 

// Get date-only portion of date, without its time. 
DateTime dateOnly = date1.Date; 
// Display date using short date string. 
Console.WriteLine(dateOnly.ToString("d")); 
// Display date using 24-hour clock. 
Console.WriteLine(dateOnly.ToString("g")); 
Console.WriteLine(dateOnly.ToString("MM/dd/yyyy HH:mm")); 
// The example displays the following output to the console: 
//  6/1/2008 7:47:00 AM 
//  6/1/2008 
//  6/1/2008 12:00 AM 
//  06/01/2008 00:00 

http://msdn.microsoft.com/en-us/library/system.datetime.date.aspx

7

Habituellement, j'utilise DateTime.ToShortDateString() pour convertir en Culture manière -Aware à une chaîne. De cette façon, vous pouvez le formater à ce jour uniquement en respectant la mise en forme actuelle du jeu de culture pour le fil actuel.

+1

+1 pour 'DateTime.ToShortDateString()'. J'écrivais juste cela dans ma réponse, et ensuite remarqué que vous avez également posté exactement la même suggestion. –

+0

Wow, un 153-er surpassé un 100379-er. Doit être mon jour de chance :-). Je vous remercie! –

9
datetime DateWithTimeNoSeconds = 
DateTime.Now.Date.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute); 

Cela devient la date de date & heure et ajoute des heures et des minutes.

+11

Vous devriez faire 'DateTime.Now' une seule fois, enregistrer le résultat dans une variable et utiliser cette variable, sinon vous risquez de construire un' DateWithTimeNoSeconds' qui est à une heure d'arrêt, ou même un jour de congé (s'il est utilisé au début du heure/jour). Exemple: 'var now = DateTime.Now; now = new DateTime (now.Year, now.Month, maintenant.Day, now.Hour, now.Minute, 0); ' –

2

A propos de DateTime.AddMinutes (ou secondes ou heures) si vous voulez supprimer au lieu d'ajouter simplement ajouter un nombre négatif!

6

Bien que dans la plupart des cas je suis d'accord avec Mark Byers, j'ai eu une situation où j'avais besoin de stocker une date qui était seulement granulaire à l'heure. Stocker des minutes et des secondes serait non seulement superflu, mais aussi inexact. L'utilisateur a simplement choisi une date et une heure, donc si la date et l'heure seraient sélectionnées par l'utilisateur, les minutes et les secondes seraient réglées sur l'heure actuelle.

La suppression des minutes et des secondes est très facile dans ce cas. Voici le code:

scheduledDate = scheduledDate.AddMinutes(
    scheduledDate.Minute * -1).AddSeconds(
    scheduledDate.Second * -1); 

Ensuite, je le stocke dans le DB comme une date complète, avec les minutes et les secondes toujours 0.

+0

C'est probablement le meilleur moyen d'aplatir les dates. –

0

façon simple, sans doute pas le meilleur mais

DateTime dt = new DateTime(); 
     dt = DateTime.Now; 
     string sdate = dt.ToShortDateString(); 
     dt = DateTime.Parse(sdate); 

Ou pour faire court

DateTime DateTimeWithOut_HoursMinutesSecondsEct = DateTime.Parse(DateTime.Now.ToShortDateString()); 
0

Quelque chose comme ça pour date et l'heure sans secondes:

private DateTime _startTime; 
public DateTime StartTime 
{ 
    get { return _startTime; } 
    set 
    { 
     _startTime = value.AddSeconds(-value.Second) 
          .AddMilliseconds(-value.Millisecond); 
    } 
}