¿Cómo puedo cambiar solo el tiempo en mi DateTimevariable "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 DateTimeno 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 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 motivaron a comenzar el proyecto Noda Time , que ahora está listo para la producción. Su ZonedDateTimetipo se hace "consciente" al vincularlo a una tzentrada de la base de datos .
Addproporcionando un intervalo de tiempo cero? Tu expresión es equivalente as.Date, pero más larga ...DateTimes, (uno para la fecha y otro para la hora) puede hacer esto:var result = date.Date + time.TimeOfDay;timeno 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,DateTimees una implementación "ingenua" en términos deldatetimemó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
DateTimeobjeto, puede usar elAddmétodo.La
TimeOfDaypropiedad es unTimeSpanobjeto y se puede pasar alAddmétodo. Y como usamos laDatepropiedad de ladateToUsevariable, 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
DateTimees 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 unaDateTimeinstancia.Usando los siguientes métodos de extensión
puedes configurar
DateTimecomponentes 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.Addy agregue unNew TimeSpancon la nueva hora que desea agregarfuente
Cuando construya su
DateTimeobjeto, use un constructor que le permita especificar el tiempo:Si ya tiene un
DateTimeobjeto y desea cambiar la hora, puede agregar minutos, horas o segundosDateTimeusando métodos simples:Observe cómo tenemos que "guardar" el resultado de cada llamada de método a la
myDateTimevariable. Esto se debe a queDateTimees 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
TimeSpana al originalDateTimeen su lugar:Si desea establecer horas / minutos / segundos absolutos, en lugar de agregar a los valores existentes, puede usar el
DateTimeconstructor 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
DateTimevalor de muchas maneras diferentes:Método de extensión
DateTimeluego 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.