2009-09-11 7 views
11

J'ai un objet DateTime qui peut contenir ou non des informations de date/heure. Avec cela, j'ai besoin de remplacer l'heure avec mon nouvel horaire indépendamment de la date et vice versa. Comment pourrais-je y parvenir? Je ne vois rien d'autre que de créer deux nouveaux objets DateTime, l'un avec l'ancienne/nouvelle date et l'autre avec l'ancienne/nouvelle heure et la concaténation. Il doit sûrement y avoir un meilleur moyen que cela?Remplacer une section Date ou Heure dans un objet DateTime dans C#

Répondre

12

Je voudrais écrire deux ou trois méthodes d'extension:

public static DateTime WithTime(this DateTime date, TimeSpan time) 
{ 
    return date.Date + time; 
} 

public static DateTime WithDate(this DateTime original, DateTime newDate) 
{ 
    return newDate.WithTime(original); 
} 

public static DateTime WithTime(this DateTime original, DateTime newTime) 
{ 
    return original.Date + newTime.TimeOfDay; 
} 

(Vous n'avez pas vraiment besoin à la fois des deuxièmes méthodes, mais parfois il peut être plus simple si vous enchaînant beaucoup d'appels.)

Notez que vous n'êtes pas en train de créer des objets en termes d'articles sur le tas, comme DateTime est un struct.

12

DateTime est une structure immuable.

La seule option consiste à construire une nouvelle structure DateTime basée sur vos deux valeurs existantes. C'est la meilleure approche. Heureusement, il est une doublure:

DateTime CreateNewDateTime(DateTime date, DateTime time) 
{ 
    return new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second); 
} 
0

Ce n'est peut-être pas exactement que vous recherchez, mais la classe DateTime comporte une série de méthodes Add (AddMinutes(), AddDays(), etc.). Je dis cela pourrait ne pas être ce que vous cherchez, car ceux-ci renvoient un DateTime, alors vous devez faire quelque chose comme

myDate = myDate.AddMinutes(60); 
1

bande le temps d'un datetime existant en écrivant .Date

DateTime new = oldDate.Date; 

Ajoutez votre TIme soit en ajoutant les heures, les minutes & secondes individuellement

DateTime new = oldDate.Date.AddHours(14).AddMinutes(12).AddSeconds(33); 

ou à la fois

DateTime new = oldDate.Date.AddSeconds(51153); 

ou en ajoutant un TimeSpan()

DateTime new = oldDate.Date.Add(new TimeSpan(14,12,33)); 
Questions connexes