hora - datetime set time c#
¿Cómo cambiar la hora en DateTime? (27)
¿Cómo puedo cambiar solo la hora en mi variable de fecha y hora "s"?
DateTime s = some datetime;
¿Eso no soluciona tus problemas?
Dateime dt = DateTime.Now;
dt = dt.AddSeconds(10);
¿Qué hay de malo con el método DateTime.AddSeconds donde puedes sumar o restar segundos?
Acabo de encontrar esta publicación porque tuve un problema similar en el que quería establecer la hora para un objeto Entity Framework en MVC que obtiene la fecha de una vista (selector de fecha), por lo que el componente de la hora es 00:00:00 pero necesito Es la hora actual. Basándome en las respuestas en este post, se me ocurrió:
myEntity.FromDate += DateTime.Now.TimeOfDay;
Al agregar .Fecha a la fecha, se establece en medianoche (00:00).
MyDate.Date
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:
DateTime.Now.Date.AddHours(23).AddMinutes(30)
Por supuesto, puede reemplazar DateTime.Now o MyDate con cualquier fecha de su elección.
Aquí hay un método que podrías usar para hacerlo por ti, úsalo así
DateTime newDataTime = ChangeDateTimePart(oldDateTime, DateTimePart.Seconds, 0);
Aquí está el método, probablemente hay una mejor manera, pero acabo de sacar esto:
public enum DateTimePart { Years, Months, Days, Hours, Minutes, Seconds };
public DateTime ChangeDateTimePart(DateTime dt, DateTimePart part, int newValue)
{
return new DateTime(
part == DateTimePart.Years ? newValue : dt.Year,
part == DateTimePart.Months ? newValue : dt.Month,
part == DateTimePart.Days ? newValue : dt.Day,
part == DateTimePart.Hours ? newValue : dt.Hour,
part == DateTimePart.Minutes ? newValue : dt.Minute,
part == DateTimePart.Seconds ? newValue : dt.Second
);
}
Aquí hay una forma de gueto, pero funciona :)
DateTime dt = DateTime.Now; //get a DateTime variable for the example
string newSecondsValue = "00";
dt = Convert.ToDateTime(dt.ToString("MM/dd/yyyy hh:mm:" + newSecondsValue));
Cuando construya su objeto DateTime
, use un constructor que le permita especificar el tiempo:
var myDateTime = new DateTime(2000, 01, 01, 13, 37, 42); // 2000-01-01 13:37:42
Si ya tiene un objeto DateTime
y desea cambiar la hora, puede agregar minutos, horas o segundos a su DateTime
utilizando métodos simples:
var myDateTime = new DateTime(2000, 01, 01); // 2000-01-01 00:00:00
myDateTime = myDateTime.AddHours(13); // 2000-01-01 13:00:00
myDateTime = myDateTime.AddMinutes(37); // 2000-01-01 13:37:00
myDateTime = myDateTime.AddSecounds(42); // 2000-01-01 13:37:42
Observe cómo debemos "guardar" el resultado de cada llamada de método a la variable myDateTime
. Esto se debe a que DateTime
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 un TimeSpan
al DateTime
original en su lugar:
var myDateTime = new DateTime(2000, 01, 01); // 2000-01-01 00:00:00
myDateTime += new TimeSpan(13, 37, 42); // 2000-01-01 13:37:42
Si desea establecer las horas / minutos / segundos absolutos, en lugar de agregar valores a los valores existentes, puede usar el constructor DateTime
mencionado anteriormente y reutilizar los valores para el año / mes / día anterior:
myDateTime = new DateTime(myDateTime.Year, myDateTime.Month, myDateTime.Day,
20, 33, 19) // 2000-01-01 20:33:19
Dado que DateTime
es inmutable, se debe crear una nueva instancia cuando se necesita cambiar un componente de fecha. Desafortunadamente, no hay una funcionalidad incorporada para establecer componentes individuales de una instancia de DateTime
.
Usando los siguientes métodos de extensión
public static DateTime SetPart(this DateTime dateTime, int? year, int? month, int? day, int? hour, int? minute, int? second)
{
return new DateTime(
year ?? dateTime.Year,
month ?? dateTime.Month,
day ?? dateTime.Day,
hour ?? dateTime.Hour,
minute ?? dateTime.Minute,
second ?? dateTime.Second
);
}
public static DateTime SetYear(this DateTime dateTime, int year)
{
return dateTime.SetPart(year, null, null, null, null, null);
}
public static DateTime SetMonth(this DateTime dateTime, int month)
{
return dateTime.SetPart(null, month, null, null, null, null);
}
public static DateTime SetDay(this DateTime dateTime, int day)
{
return dateTime.SetPart(null, null, day, null, null, null);
}
public static DateTime SetHour(this DateTime dateTime, int hour)
{
return dateTime.SetPart(null, null, null, hour, null, null);
}
public static DateTime SetMinute(this DateTime dateTime, int minute)
{
return dateTime.SetPart(null, null, null, null, minute, null);
}
public static DateTime SetSecond(this DateTime dateTime, int second)
{
return dateTime.SetPart(null, null, null, null, null, second);
}
puede configurar componentes de DateTime
individuales como
var now = DateTime.Now;
now.SetSecond(0);
DateTime es un tipo inmutable, por lo que no puede cambiarlo .
Sin embargo, puede crear una nueva instancia de DateTime basada en su instancia anterior. En su caso, parece que necesita la propiedad Fecha, y luego puede agregar un TimeSpan que represente la hora del día.
Algo como esto:
var newDt = s.Date + TimeSpan.FromHours(2);
De hecho, no puedes cambiar el tiempo 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 una fecha y hora cambiando segundos, puede hacer esto:
DateTime now = DateTime.Now;
DateTime secondschanged = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, yourseconds);
La mejor solución es:
currdate.AddMilliseconds(currdate.Millisecond * -1).AddSeconds(currdate.Second * -1).AddMinutes(currdate.Minute * -1).AddHours(currdate.Hour * -1);
La solución más simple:
DateTime s = //some Datetime that you want to change time for 8:36:44 ;
s = new DateTime(s.Year, s.Month, s.Day, 8, 36, 44);
Y si necesita un formato de fecha y hora específico:
s = new DateTime(s.Year, s.Month, s.Day, 8, 36, 44).ToString("yyyy-MM-dd h:mm:ss");
Muy bien, estoy buceando con 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 puede 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);
No puedes cambiar un valor de DateTime, es inmutable. Sin embargo, puede cambiar la variable para tener un nuevo valor. La forma más fácil de hacer eso para cambiar 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;
Ahora será la misma fecha, pero a las 10.30 am.
Tenga en cuenta que DateTime
ignora las transiciones del horario de verano, que representan la hora gregoriana "ingenua" en ambas direcciones (consulte la sección de Comentarios en los documentos de DateTime
). 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 tipo ZonedDateTime
se hace "consciente" al vincularlo a una entrada de la base de datos tz
.
Prefiero esto:
DateTime s = //get some datetime;
s = new DateTime(s.Year, s.Month,s.Day,s.Hour,s.Minute,0);
Prueba este
var NewDate = Convert.ToDateTime(DateTime.Now.ToString("dd/MMM/yyyy")+" "+"10:15 PM")/*Add your time here*/;
Si tienes un DateTime como 2014/02/05 18:19:51 y quieres solo el 2014/02/05, puedes hacer eso:
_yourDateTime = new DateTime(_yourDateTime.Year, _yourDateTime.Month, _yourDateTime.Day)
Si ya tiene el tiempo almacenado en otro objeto DateTime
, puede usar el método Add
.
DateTime dateToUse = DateTime.Now();
DateTime timeToUse = new DateTime(2012, 2, 4, 10, 15, 30); //10:15:30 AM
DateTime dateWithRightTime = dateToUse.Date.Add(timeToUse.TimeOfDay);
La propiedad TimeOfDay
es un objeto TimeSpan
y se puede pasar al método Add
. Y como usamos la propiedad Date
de la variable dateToUse
, obtenemos solo la fecha y agregamos el intervalo de tiempo.
Sucedió en este post mientras buscaba la misma funcionalidad que posiblemente podría hacer lo que el chico quería. Toma la fecha original y reemplaza la parte de tiempo
DateTime dayOpen = DateTime.Parse(processDay.ToShortDateString() + " 05:00 AM");
Use Date.Add
y agregue un New TimeSpan
con la nueva hora que desea agregar
DateTime dt = DateTime.Now
dt.Date.Add(new TimeSpan(12,15,00))
un trazador de líneas
var date = DateTime.Now.Date.Add(new TimeSpan(4, 30, 0));
traería de vuelta la fecha de hoy con un tiempo de 4:30:00, reemplace DateTime. Ahora con cualquier objeto de fecha
DateTime s;
//s = datevalue
s = s.AddMilliseconds(10);
s = s.AddMinutes(10);
s = s.AddSeconds(10);
s = s.AddHours(10);
podría agregar valores de + ve / -ve en el parámetro.
s.Add(new TimeSpan(1, 1, 1));
Using an extencion to DateTime:
public enum eTimeFragment
{
hours,
minutes,
seconds,
milliseconds
}
public static DateTime ClearTimeFrom(this DateTime dateToClear, eTimeFragment etf)
{
DateTime dtRet = dateToClear;
switch (etf)
{
case eTimeFragment.hours:
dtRet = dateToClear.Date;
break;
case eTimeFragment.minutes:
dtRet = dateToClear.AddMinutes(dateToClear.Minute * -1);
dtRet = dtRet.ClearTimeFrom(eTimeFragment.seconds);
break;
case eTimeFragment.seconds:
dtRet = dateToClear.AddSeconds(dateToClear.Second * -1);
dtRet = dtRet.ClearTimeFrom(eTimeFragment.milliseconds);
break;
case eTimeFragment.milliseconds:
dtRet = dateToClear.AddMilliseconds(dateToClear.Millisecond * -1);
break;
}
return dtRet;
}
Use así:
Console.WriteLine (DateTime.Now.ClearTimeFrom (eTimeFragment.hours))
esto tiene que volver: 2016-06-06 00: 00: 00.000
//The fastest way to copy time
DateTime justDate = new DateTime(2011, 1, 1); // 1/1/2011 12:00:00AM the date you will be adding time to, time ticks = 0
DateTime timeSource = new DateTime(1999, 2, 4, 10, 15, 30); // 2/4/1999 10:15:30AM - time tick = x
justDate = new DateTime(justDate.Date.Ticks + timeSource.TimeOfDay.Ticks);
Console.WriteLine(justDate); // 1/1/2011 10:15:30AM
Console.Read();
DateTime ts = DateTime.Now;
ts = new DateTime ( ts.Year, ts.Month, ts.Day, 0, 0, 0 ) ;
Console.WriteLine ( "Today = " + ts.ToString("M/dd/yy HH:mm:ss") ) ;
Ejecutado: Hoy = 9/04/15 00:00:00
int year = 2012;
int month = 12;
int day = 24;
int hour = 0;
int min = 0;
int second = 23;
DateTime dt = new DateTime(year, month, day, hour, min, second);
s = s.Date.AddHours(x).AddMinutes(y).AddSeconds(z);
De esta forma conserva su fecha, mientras inserta una nueva parte de horas, minutos y segundos a su gusto.