Comment puis-je changer uniquement l'heure dans ma DateTime
variable "s"?
DateTime s = some datetime;
Vous ne pouvez pas modifier une valeur DateTime - elle est immuable. Cependant, vous pouvez modifier la variable pour avoir une nouvelle valeur. La façon la plus simple de le faire pour modifier uniquement l'heure est de créer un TimeSpan avec l'heure appropriée et d'utiliser la propriété DateTime.Date:
DateTime s = ...;
TimeSpan ts = new TimeSpan(10, 30, 0);
s = s.Date + ts;
s
sera désormais la même date, mais à 10h30.
Notez que DateTime
ne tient pas compte des transitions d'heure d'été, représentant l'heure grégorienne «naïve» dans les deux sens (voir la section Remarques dans la DateTime
documentation ). Les seules exceptions sont .Now
et .Today
: elles récupèrent l'heure système actuelle qui reflète ces événements lorsqu'ils se produisent.
C'est le genre de chose qui m'a motivé à démarrer le projet Noda Time , qui est maintenant prêt pour la production. Son ZonedDateTime
type est rendu "conscient" en le liant à une tz
entrée de base de données .
Add
fournissant un intervalle de temps nul? Votre expression est équivalentes.Date
, mais plus longue ...DateTime
s, (un pour la date et un pour l'heure), vous pouvez le faire:var result = date.Date + time.TimeOfDay;
time
ne devrait pas l'êtreDateTime
. (J'utiliserais Noda Time bien sûr, mais ...)D'accord, je plonge avec ma suggestion, une méthode d'extension:
Appelez ensuite:
Il est important de noter que cette extension renvoie un nouvel objet date, vous ne pouvez donc pas le faire:
Mais vous pouvez le faire:
la source
Datetime.Today.Add(time.TimeOfDay)
. En effet, en interne, le constructeur n'effectue aucune correction basée sur le calendrier, à l'exception de la comptabilisation d'une année bissextile pour la partie date. C'est à direDateTime
une implémentation "naïve" en termes dedatetime
module de Python .De cette façon, vous conservez votre date, tout en insérant une nouvelle partie heures, minutes et secondes à votre convenance.
la source
.AddMilliseconds()
si nécessaire.bon mot
ramènerait la date d'aujourd'hui avec une heure de 4:30:00, remplacer DateTime.Now par n'importe quel objet de date
la source
DateTime est un type immuable, vous ne pouvez donc pas changer .
Cependant, vous pouvez créer une nouvelle instance DateTime basée sur votre instance précédente. Dans votre cas, il semble que vous ayez besoin de la propriété Date, et vous pouvez ensuite ajouter un TimeSpan qui représente l'heure de la journée.
Quelque chose comme ça:
la source
Si l'heure est déjà stockée dans un autre
DateTime
objet, vous pouvez utiliser laAdd
méthode.La
TimeOfDay
propriété est unTimeSpan
objet et peut être transmise à laAdd
méthode. Et puisque nous utilisons laDate
propriété de ladateToUse
variable, nous obtenons juste la date et ajoutons l'intervalle de temps.la source
Solution la plus simple:
Et si vous avez besoin d'un format de date et d'heure spécifique:
la source
Exécuté: Aujourd'hui = 9/04/15 00:00:00
la source
Je suis arrivé à ce poste alors que je cherchais la même fonctionnalité, cela pourrait éventuellement faire ce que le gars voulait. Prenez la date d'origine et remplacez la partie heure
la source
Étant donné qu'il
DateTime
est immuable, une nouvelle instance doit être créée lorsqu'un composant de date doit être modifié. Malheureusement, il n'y a pas de fonctionnalité intégrée pour définir les composants individuels d'unDateTime
instance.Utilisation des méthodes d'extension suivantes
vous pouvez définir des
DateTime
composants individuels commela source
Si vous avez un DateTime comme 2014/02/05 18:19:51 et que vous voulez juste 2014/02/05, vous pouvez le faire:
la source
L'ajout de .Date à votre date la définit à minuit (00:00).
Remarque Le SQL équivaval est
CONVERT(DATETIME, CONVERT(DATE, @MyDate))
Ce qui rend cette méthode si bonne, c'est qu'elle est à la fois rapide à taper et facile à lire. Un bonus est qu'il n'y a pas de conversion à partir de chaînes.
C'est-à-dire pour régler la date d'aujourd'hui à 23h30, utilisez:
Vous pouvez bien sûr remplacer DateTime.Now ou MyDate par la date de votre choix.
la source
En fait, vous ne pouvez pas changer l'heure une fois créée. Mais vous pouvez le créer facilement avec de nombreux constructeurs: https://docs.microsoft.com/en-us/dotnet/api/system.datetime.-ctor?view=netframework-4.7.2
Par exemple, si vous voulez créer une seconde de changement de DateTime, vous pouvez simplement faire ceci:
la source
la source
Utilisez
Date.Add
et ajoutez unNew TimeSpan
avec la nouvelle heure que vous souhaitez ajouterla source
Lorsque vous construisez votre
DateTime
objet, utilisez un constructeur qui vous permet de spécifier l'heure:Si vous avez déjà un
DateTime
objet et souhaitez changer l'heure, vous pouvez ajouter des minutes, des heures ou des secondes à votre enDateTime
utilisant des méthodes simples:Remarquez comment nous devons «enregistrer» le résultat de chaque appel de méthode à la
myDateTime
variable. En effet, leDateTime
est immuable et ses méthodes créent simplement de nouvelles instances avec les heures / minutes / secondes supplémentaires ajoutées.Si vous devez ajouter à la fois des heures et des minutes (et / ou des secondes), vous pouvez simplifier le code en ajoutant un
TimeSpan
à l'original à laDateTime
place:Si vous souhaitez définir des heures / minutes / secondes absolues, plutôt que d'ajouter aux valeurs existantes, vous pouvez utiliser le
DateTime
constructeur susmentionné et réutiliser les valeurs pour l'année / mois / jour antérieures:la source
Voici une méthode que vous pourriez utiliser pour le faire pour vous, utilisez-la comme ceci
Voici la méthode, il y a probablement une meilleure façon, mais je viens de préparer ceci:
la source
Je viens de rencontrer ce message parce que j'avais un problème similaire où je voulais définir l'heure pour un objet Entity Framework dans MVC qui obtient la date à partir d'une vue (datepicker) de sorte que le composant heure est 00:00:00 mais j'ai besoin ce sera l'heure actuelle. Sur la base des réponses dans ce post, j'ai trouvé:
la source
la source
Vous pouvez attribuer une valeur initiale à une nouvelle
DateTime
valeur de différentes manières:Méthode d'extension
DateTime
puis en utilisant
ChangeTime
:en utilisant les méthodes Add
en utilisant le Timespan
en utilisant la valeur initiale
la source
Quel est le problème avec la méthode DateTime.AddSeconds où vous pouvez ajouter ou soustraire des secondes?
la source
vous pouvez ajouter des valeurs + ve / -ve dans le paramètre.
la source
Cela ne résout-il pas vos problèmes ??
la source
Je préfère ça:
la source
Utilisez comme ceci:
Console.WriteLine (DateTime.Now.ClearTimeFrom (eTimeFragment.hours))
cela doit retourner: 2016-06-06 00: 00: 00.000
la source
La meilleure solution est:
la source
Essaye celui-là
la source
voici une façon ghetto, mais ça marche :)
la source
dt.AddSeconds(0-dt.Seconds).AddSeconds(newSecondsValue)
mais je ne le recommanderais pas.