2009-09-11 7 views
11

Ho un oggetto DateTime che può o non può contenere già alcune informazioni sulla data/ora. Con quello ho bisogno di sostituire il tempo con il mio nuovo tempo indipendentemente dalla data e viceversa. Come potrei ottenere questo? Non riesco a vedere nulla di ovvio tranne la creazione di due nuovi oggetti DateTime, uno con la vecchia/nuova data e uno con la vecchia/nuova ora e la concatenazione. Ci deve sicuramente essere un modo migliore di questo?Sostituire una sezione Data o Ora in un oggetto DateTime in C#

risposta

12

vorrei scrivere due o tre metodi di estensione:

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; 
} 

(che davvero non hanno bisogno sia del secondo metodi, ma di tanto in tanto potrebbe essere più semplice se stai concatenamento insieme un sacco di chiamate.)

si noti che non si sta creando alcun oggetti in termini di voci sul mucchio, come DateTime è una struct.

12

DateTime è una struttura immutabile.

L'unica opzione è creare una nuova struttura DateTime in base ai due valori esistenti. Questo è l'approccio migliore. Per fortuna, si tratta di un uno di linea:

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

Questo potrebbe non essere esattamente quello che stai cercando, ma la classe DateTime ha una serie di metodi Aggiungi (AddMinutes(), AddDays(), ecc.). Dico questo potrebbe non essere quello che stai cercando, perché questi restituiscono un DateTime, in modo che avrebbe dovuto fare qualcosa di simile

myDate = myDate.AddMinutes(60); 
1

Striscia il tempo da un datetime esistente scrivendo .Data

DateTime new = oldDate.Date; 

Aggiungi il tuo momento da ciascuna aggiungendo le ore, i minuti & secondi individualmente

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

o tutti in una volta

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

o aggiungendo un periodo()

DateTime new = oldDate.Date.Add(new TimeSpan(14,12,33)); 
Problemi correlati