year parse now long c# datetime

parse - datetime year c#



Fecha y hora de la próxima ocurrencia a las 3am (6)

Estoy seguro de que esto es muy fácil, pero tengo un bloqueo mental repentino.
Estoy tratando de obtener un objeto DateTime para la próxima aparición de las 3am. Por ejemplo, si DateTime.Now es 16/july/2009 : 12:04pm - la próxima ocurrencia de las 3am sería el 17/july/2009 : 03:00

Sin embargo, si DateTime.Now fuera el 17/july/2009 : 01:00 , la próxima aparición sería el 17/july/2009 : 03:00 (no el día siguiente).
¿Tiene sentido?


Creo que este:

DateTime.Now.Date.AddHours(3).AddMinutes(0).AddSeconds(0).AddDays(1);


Puede hacerlo sin una sentencia if (u operador condicional):

// get the current time DateTime now = DateTime.Now; // get a 3:00 AM point in time in the future DateTime next = now.Date.AddHours(24 + 3); // subtract the number of whole extra days next = next.AddDays((now - next).Days);

Siempre le explico que debe obtener el punto en el tiempo (DateTime.Now) solo una vez en un cálculo como este, ya que es un valor cambiante, ¿tengo que repetirlo? Bueno, acabo de hacerlo. ;)


Una alternativa (utilizando una función):

DateTime NextAt(TimeSpan time) { DateTime now = DateTime.Now; DateTime result = now.Date + time; return (now <= result) ? result : result.AddDays(1); }

llámalo como

DateTime next3am = NextAt(new TimeSpan(3,0,0));


Una opción:

DateTime now = DateTime.Now; DateTime today3am = now.Date.AddHours(3); DateTime next3am = now <= today3am ? today3am : today3am.AddDays(1);

Otro:

DateTime now = DateTime.Now; DateTime today = now.Date; DateTime next3am = today.AddHours(3).AddDays(now.Hour >= 3 ? 1 : 0)

Muchas maneras de desollar a ese gato en particular :)

Por supuesto, todo esto está en la hora local , lo que significa que no debe preocuparse por las zonas horarias. La vida se vuelve más complicada si quieres involucrar zonas horarias ...

Tenga en cuenta que es una buena idea tomar DateTime.Now una vez, para evitar problemas si la fecha se desplaza mientras calcula ...


//just add 24 - 3 = 21 hours and get Today (start of day) and Add 3 hour DateTime now = DateTime.Now.AddHours(21).Today.AddHours(3);


DateTime now = DateTime.Now; DateTime threeAM = now.Date.AddHours(3); if (threeAM < now) threeAM = threeAM.AddDays(1);