web-dev-qa-db-fra.com

Supprimer heures: secondes: millisecondes dans l'objet DateTime

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

Classiquement, l'objet DateTime se présente sous la forme mm:dd:yyyy hrs:min:sec AM/PM

Existe-t-il un moyen de supprimer rapidement la partie hrs:min:sec AM/PM du DateTime afin que, lorsque je le convertis, ToString(), il en résulte uniquement mm:dd:yyyy?

14
locoboy

Pour répondre à votre question, non, vous devriez le stocker dans un type différent. Le choix le plus simple consiste à utiliser une chaîne.

string date = dateTime.ToString("MM:dd:yyyy");

Cependant, je vous déconseille également fortement de stocker les dates en interne dans votre programme sous forme de chaînes. Cela rendra difficile tout calcul ou toute comparaison. De plus, je vous déconseille de forcer une culture spécifique pour votre représentation de 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. Je voudrais aussi éviter cela, car il sera toujours difficile d'utiliser votre type avec les fonctions de bibliothèque standard. Vous devrez vous convertir tout le temps.

Laissez-le simplement en tant que DateTime et effectuez la conversion en chaîne uniquement dans le calque de présentation. Vous pouvez utiliser DateTime.ToShortDateString pour imprimer une chaîne conviviale tenant compte de la culture.

12
Mark Byers
datetime DateWithTimeNoSeconds = 
DateTime.Now.Date.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute);

Ceci obtient la date et l'heure actuelles et ajoute des heures et des minutes.

10
Dave
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

8
Gopi

D'habitude, j'utilise DateTime.ToShortDateString () pour convertir de manière Culture- en une chaîne. 

De cette façon, vous pouvez le formater à la date uniquement en respectant le formatage actuel du jeu de culture correspondant au fil actuel.

7
Uwe Keim

Bien que, dans la plupart des cas, je suis d’accord avec Mark Byers, j’ai été dans une situation où je devais enregistrer une date qui n’était jamais plus précise que l’heure. Stocker des minutes et des secondes serait non seulement superflu, mais également inexact. L'utilisateur a simplement sélectionné une date et une heure. Ainsi, si la date et l'heure sont définies par l'utilisateur, les minutes et les secondes sont réglées sur l'heure actuelle. 

Supprimer les minutes et les 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 la base de données sous forme de date et heure complète, avec toujours les minutes et les secondes à 0. 

7
user2113657

Si vous souhaitez supprimer les heures, les secondes et les millisecondes (supprimer comme réinitialisé à 0) d'un objet DateTime sans convertir en chaîne, vous pouvez utiliser la propriété Date.

// Get date-only portion of date, without its time.
var date = DateTime.Now.Date;

L'exemple ci-dessous utilise la propriété Date pour extraire le composant date d'une valeur DateTime avec son composant time défini sur zéro (ou 0:00:00 ou minuit).

msdn

2
aloisdg

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

2
lunarnet76

Manière facile, probablement pas le meilleur mais

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

Ou pour faire court

var dt = DateTime.Parse(DateTime.Now.ToShortDateString());
1
Riaan Hayes

Quelque chose comme ceci pour la date et l'heure sans secondes:

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