¿Cómo puedo cambiar solo el tiempo 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 fácil 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 a.m.
Tenga en cuenta que DateTime
no tiene en cuenta las transiciones de 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 motivaron a comenzar el proyecto Noda Time , que ahora está listo para la producción. Su ZonedDateTime
tipo se hace "consciente" al vincularlo a una tz
entrada de la base de datos .
Add
proporcionando un intervalo de tiempo cero? Tu expresión es equivalente as.Date
, pero más larga ...DateTime
s, (uno para la fecha y otro para la hora) puede hacer esto:var result = date.Date + time.TimeOfDay;
time
no debería ser unDateTime
. (Yo usaría Noda Time, por supuesto, pero ...)Muy bien, estoy buceando con mi sugerencia, un método de extensión:
Luego llame:
Es importante tener en cuenta que esta extensión devuelve un nuevo objeto de fecha, por lo que no puede hacer esto:
Pero puedes hacer esto:
fuente
Datetime.Today.Add(time.TimeOfDay)
. Esto se debe a que, internamente, el constructor no realiza correcciones basadas en el calendario, excepto la contabilidad de un año bisiesto para la parte de la fecha. Es decir,DateTime
es una implementación "ingenua" en términos deldatetime
módulo de Python .De esta manera conserva su fecha, mientras inserta una nueva parte de horas, minutos y segundos a su gusto.
fuente
.AddMilliseconds()
si es necesario.un trazador de líneas
devolvería la fecha de hoy con una hora de 4:30:00, reemplazaría DateTime.Now con cualquier objeto de fecha
fuente
DateTime es un tipo inmutable, por lo que no puede cambiar .
Sin embargo, puede crear una nueva instancia de DateTime basada en su instancia anterior. En su caso, parece que necesita la propiedad Date, y luego puede agregar un TimeSpan que representa la hora del día.
Algo como esto:
fuente
Si ya tiene el tiempo almacenado en otro
DateTime
objeto, puede usar elAdd
método.La
TimeOfDay
propiedad es unTimeSpan
objeto y se puede pasar alAdd
método. Y como usamos laDate
propiedad de ladateToUse
variable, obtenemos solo la fecha y agregamos el intervalo de tiempo.fuente
La solución más simple:
Y si necesita un formato de fecha y hora específico:
fuente
Ejecutado: Hoy = 9/04/15 00:00:00
fuente
Ocurrió con esta publicación cuando estaba buscando la misma funcionalidad que posiblemente podría hacer lo que el chico quería. Tome la fecha original y reemplace la parte de tiempo
fuente
Como
DateTime
es inmutable, se debe crear una nueva instancia cuando se necesita cambiar un componente de fecha. Desafortunadamente, no hay una funcionalidad incorporada para configurar componentes individuales de unaDateTime
instancia.Usando los siguientes métodos de extensión
puedes configurar
DateTime
componentes individuales comofuente
Si tiene un DateTime como 2014/02/05 18:19:51 y solo quiere 2014/02/05, puede hacer eso:
fuente
Agregar. Fecha a su fecha lo establece a medianoche (00:00).
Nota El SQL equivalente es
CONVERT(DATETIME, CONVERT(DATE, @MyDate))
Lo que hace que este método sea tan bueno es que es rápido de escribir y fácil de leer. Una ventaja es que no hay conversión de cadenas.
Es decir, para establecer la fecha de hoy a las 23:30, use:
Por supuesto, puede reemplazar DateTime.Now o MyDate con cualquier fecha que elija.
fuente
De hecho, no puede cambiar la hora una vez que se crea. Pero puede crearlo fácilmente con muchos constructores: https://docs.microsoft.com/en-us/dotnet/api/system.datetime.-ctor?view=netframework-4.7.2
Por ejemplo, si desea crear un cambio de fecha y hora en segundos, simplemente puede hacer esto:
fuente
fuente
Use
Date.Add
y agregue unNew TimeSpan
con la nueva hora que desea agregarfuente
Cuando construya su
DateTime
objeto, use un constructor que le permita especificar el tiempo:Si ya tiene un
DateTime
objeto y desea cambiar la hora, puede agregar minutos, horas o segundosDateTime
usando métodos simples:Observe cómo tenemos que "guardar" el resultado de cada llamada de método a la
myDateTime
variable. Esto se debe a queDateTime
es inmutable, y sus métodos simplemente crean nuevas instancias con las horas / minutos / segundos adicionales agregados.Si necesita agregar horas y minutos (y / o segundos) y al mismo tiempo, puede simplificar el código agregando
TimeSpan
a al originalDateTime
en su lugar:Si desea establecer horas / minutos / segundos absolutos, en lugar de agregar a los valores existentes, puede usar el
DateTime
constructor mencionado anteriormente y reutilizar los valores para año / mes / día de antes:fuente
Aquí hay un método que podría usar para hacerlo por usted, úselo de esta manera
Aquí está el método, probablemente haya una mejor manera, pero acabo de prepararlo:
fuente
Acabo de encontrar esta publicación porque tuve un problema similar por el cual quería establecer la hora para un objeto de Entity Framework en MVC que obtiene la fecha de una vista (selector de fecha), por lo que el componente de hora es 00:00:00 pero necesito Es la hora actual. En base a las respuestas en esta publicación, se me ocurrió:
fuente
fuente
Puede asignar un valor inicial a un nuevo
DateTime
valor de muchas maneras diferentes:Método de extensión
DateTime
luego usando
ChangeTime
:utilizando los métodos Agregar
usando el intervalo de tiempo
usando el valor inicial
fuente
¿Qué tiene de malo el método DateTime.AddSeconds donde puede agregar o restar segundos?
fuente
podría agregar valores + ve / -ve en el parámetro.
fuente
¿Eso no soluciona tus problemas?
fuente
Prefiero esto:
fuente
Usar así:
Console.WriteLine (DateTime.Now.ClearTimeFrom (eTimeFragment.hours))
esto tiene que volver: 2016-06-06 00: 00: 00.000
fuente
La mejor solución es:
fuente
Prueba este
fuente
Aquí hay una manera de gueto, pero funciona :)
fuente
dt.AddSeconds(0-dt.Seconds).AddSeconds(newSecondsValue)
pero no lo recomendaría.