2010-03-05 11 views
4

Je l'utilise pour convertir DateTime valeur en Date, puis j'ajoute 00:00:00 et 23:59:59 pour s'assurer que toute la journée est prise en compte lors du comptage des choses . Je suis à peu près sûr que c'est une mauvaise façon de faire les choses. Quel serait le bon chemin?DateTime convertir en Date, puis de nouveau en DateTime en C#

 DateTime varObliczOd = DateTime.Parse(dateTimeWycenaPortfelaObliczDataOd.Value.ToShortDateString() + " 00:00:00"); 
     DateTime varObliczDo = DateTime.Parse(dateTimeWycenaPortfelaObliczDataDo.Value.ToShortDateString() + " 23:59:59"); 
+2

Pourriez-vous expliquer le contexte dans lequel cela est utilisé, s'il vous plaît – msarchet

+1

Qu'essayez-vous de faire avec ces dates. Si vous ne voulez pas le temps réel là-bas, vous pouvez simplement faire dateTimeVar.Date qui vous donnera la date à 12:00 AM à la fin et vous pouvez obtenir la fin de la journée avec dateTimeVar.Date.AddDays (1) .AddSeconds (-1) –

+0

J'utilise ceci pour fournir cette date à la base de données Sql. Il est important de faire toutes les transactions entre 00 et 23:59 (bien qu'elles ne fonctionnent que de 8 à 18 mais je préfère couvrir toute la journée) – MadBoy

Répondre

11

si dateTimeWycenaPortfelaObliczDataOd est de type DateTime, vous pouvez utiliser:

dateTimeWycenaPortfelaObliczDataOd.Date 

pour obtenir la partie date seulement (le temps sera 00:00:00 ...). Si vous voulez obtenir la dernière tic-tac de la date, vous pouvez utiliser:

dateTimeWycenaPortfelaObliczDataOd.Date.AddDays(1).AddTicks(-1) 

mais vous avez vraiment mieux travailler avec la prochaine date (.AddDays (1)).

Dans tous les cas, il n'est pas nécessaire de convertir en chaîne et de revenir à DateTime.

+0

Super, je ne peux pas travailler avec .AddDays (1) seulement parce qu'il prendra en considération les transactions du jour suivant (certaines choses sont écrites en db faites le 00:00:00) – MadBoy

+1

Ce que je voulais dire, c'est que si vous utilisez les dates Pour la vérification de distance, vous pouvez extraire tous les enregistrements de maching dont l'horodatage est conforme: StartOfTomorrow> timestamp> = startOfToday. Travailler avec la dernière tique de la journée devrait aussi bien fonctionner, ça sent juste mauvais. –

+0

True, j'aurais dû utiliser timestamp MadBoy

5

Les objets DateTime ont une propriété Date qui pourrait être ce dont vous avez besoin.

0

Quelque chose comme ça peut-être? J'ai tapé ceci hors de ma tête, il y a probablement quelques erreurs dans le code.

DateTime varObliczOd = dateTimeWycenaPortfelaObliczDataOd.AddSeconds(-dateTimeWycenaPortfelaObliczDataOd.Seconds).AddMinutes(-dateTimeWycenaPortfelaObliczDataOd.Minutes).AddHours(-dateTimeWycenaPortfelaObliczDataOd.Hours); 

DateTime varObliczDo = new DateTime(dateTimeWycenaPortfelaObliczDataDo.Year, dateTimeWycenaPortfelaObliczDataDo.Month, dateTimeWycenaPortfelaObliczDataDoDay, 23, 59, 59); 
0

DateTime newDate = new DateTime (oldDate.Year, oldDate.Month, oldDate.Day, 23, 59,59) DateTime newDate = new DateTime (oldDate.Year, oldDate.Month, oldDate.Day, 0, 0, 0)

1

Vous pouvez utiliser la propriété Date de l'objet DateTime pour accomplir ce dont vous avez besoin.

DateTime varObliczOd = dateTimeWycenaPortfelaObliczDataOd.Value.Date; 
DateTime varObliczDo = dateTimeWycenaPortfelaObliczDataDo.Value.Date.AddDays(1); 

Si vous voulez vraiment mettre fin à 23:59:59 vous pouvez faire:

DateTime varObliczDo = dateTimeWycenaPortfelaObliczDataDo.Value.Date.AddDays(1).AddSeconds(-1); 

tournerai varObliczDo être votre date de fin sans temps plus un jour (à minuit). Donc, si dateTimeWycenaPortfelaObliczDataDo était 2010-03-05 16:12:12, ce serait maintenant 2010-03-06 00:00:00.

0

Vous pouvez travailler avec TimeSpan:

DateTime varObliczOd = dateTimeWycenaPortfelaObliczDataOd - new TimeSpan(dateTimeWycenaPortfelaObliczDataOd.Hours, dateTimeWycenaPortfelaObliczDataOd.Minutes, dateTimeWycenaPortfelaObliczDataOd.Seconds); 

Comme vous éviter au moins l'analyse syntaxique, qui peut échouer en fonction des paramètres de la culture locale.

+0

Oui, il a échoué sur un poste de travail et je savais que ce sera le cas. J'ai utilisé la solution acceptée car elle semblait mieux. – MadBoy

+0

La solution que vous prenez est une question de préférences, votre solution acceptée est agréable à lire dans le code, mais elle utilise plusieurs opérations pour calculer le résultat alors que la mienne en utilise une seule. Bien sûr, ce qui est exactement derrière cette opération, je ne peux pas non plus vous le dire ^^ – Enyra

2

Vous pouvez utiliser les propriétés suivantes/méthodes sur un objet DateTime pour obtenir vos valeurs:

DateTime varObliczOd = dateTimeWycenaPortfelaObliczDataOd.Date; 
DateTime varObliczDo = dateTimeWycenaPortfelaObliczDataOd.AddDayes(1).AddTicks(-1); 
2

Il serait utile de savoir pourquoi tu as besoin, mais cela fonctionnerait.

DateTime varObliczOd = dateTimeWycenaPortfelaObliczDataOd.Date; 
DateTime varObliczDo = varObliczOd.AddDays(1).AddSeconds(-1); 

En utilisant l'attribut Date puis de les manipuler directement pour créer le composant de temps nécessaire - pas besoin de se soucier de l'analyse et de conversion.