2009-09-11 8 views
11

Tengo un objeto DateTime que puede o no contener alguna información de fecha/hora. Con eso necesito reemplazar el tiempo con mi nuevo tiempo independientemente de la fecha y viceversa. ¿Cómo lograría esto? No puedo ver nada obvio que no sea la creación de dos nuevos objetos DateTime, uno con la fecha anterior/nueva y otro con la hora antigua/nueva y la concatenación. Seguramente debe haber una mejor manera que esto?Reemplazar una sección de fecha y hora en un objeto DateTime en C#

Respuesta

12

que iba a escribir dos o tres métodos de extensión:

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

(Usted realmente no necesita tanto de las segundas métodos, pero en ocasiones puede ser más simple si que está encadenando un montón de llamadas.)

Tenga en cuenta que no va a crear ningún objetos en términos de artículos en el montón, como DateTime es una estructura.

12

DateTime es una estructura inmutable.

La única opción es construir una nueva estructura DateTime basada en sus dos valores existentes. Este es el mejor enfoque. Por suerte, se trata de un chiste:

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

Esto puede no ser exactamente lo que estás buscando, pero la clase DateTime tiene una serie de métodos Añadir (AddMinutes(), AddDays(), etc.). Digo esto podría no ser lo que usted está buscando, ya que estos devuelven un DateTime, por lo que tendría que hacer algo como

myDate = myDate.AddMinutes(60); 
1

de Gaza el tiempo de una fecha y hora actuales escribiendo .Date

DateTime new = oldDate.Date; 

Añadir su tiempo ya sea agregando las horas, los minutos & segundos individual

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

o todos a la vez

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

o mediante la adición de un intervalo de tiempo()

DateTime new = oldDate.Date.Add(new TimeSpan(14,12,33)); 
Cuestiones relacionadas