¿Cómo cambiar la hora en DateTime?

Resuelto Santhosh asked hace 14 años • 29 respuestas

¿Cómo puedo cambiar solo la hora en mi DateTimevariable "s"?

DateTime s = some datetime;
Santhosh avatar Dec 07 '09 17:12 Santhosh
Aceptado

No puede cambiar un valor de DateTime: es inmutable. Sin embargo, puede cambiar la variable para que tenga un nuevo valor. La forma más sencilla de hacerlo para cambiar solo la hora es crear un TimeSpan con la hora relevante y usar la propiedad DateTime.Date:

DateTime s = ...;
TimeSpan ts = new TimeSpan(10, 30, 0);
s = s.Date + ts;

sAhora será la misma fecha, pero a las 10.30 horas.

Tenga en cuenta que DateTimeno tiene en cuenta las transiciones del horario de verano, lo que representa el tiempo gregoriano "ingenuo" en ambas direcciones (consulte la sección Comentarios en los DateTimedocumentos ). Las únicas excepciones son .Nowy .Today: recuperan la hora actual del sistema que refleja estos eventos a medida que ocurren.

Este es el tipo de cosas que me motivó a iniciar el proyecto Noda Time , que ahora está listo para producción. Su ZonedDateTimetipo se hace "consciente" vinculándolo a una tzentrada de la base de datos .

Jon Skeet avatar Dec 07 '2009 10:12 Jon Skeet

Muy bien, voy a sumergirme en mi sugerencia, un método de extensión:

public static DateTime ChangeTime(this DateTime dateTime, int hours, int minutes, int seconds, int milliseconds)
{
    return new DateTime(
        dateTime.Year,
        dateTime.Month,
        dateTime.Day,
        hours,
        minutes,
        seconds,
        milliseconds,
        dateTime.Kind);
}

Luego llame:

DateTime myDate = DateTime.Now.ChangeTime(10,10,10,0);

Es importante tener en cuenta que esta extensión devuelve un nuevo objeto de fecha, por lo que no puedes hacer esto:

DateTime myDate = DateTime.Now;
myDate.ChangeTime(10,10,10,0);

Pero puedes hacer esto:

DateTime myDate = DateTime.Now;
myDate = myDate.ChangeTime(10,10,10,0);
joshcomley avatar Dec 07 '2009 11:12 joshcomley