¿Cómo cambiar la hora en DateTime?
¿Cómo puedo cambiar solo la hora en mi DateTime
variable "s"?
DateTime s = some datetime;
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;
s
Ahora será la misma fecha, pero a las 10.30 horas.
Tenga en cuenta que DateTime
no 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 DateTime
documentos ). Las únicas excepciones son .Now
y .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 ZonedDateTime
tipo se hace "consciente" vinculándolo a una tz
entrada de la base de datos .
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);