Necesito redondear las horas según los minutos en una variable DateTime. La condición es: si los minutos son menores que 30, los minutos deben configurarse en cero y no deben cambiarse a horas; de lo contrario, los minutos> = 30, las horas deben establecerse en horas + 1 y los minutos nuevamente se ponen en cero. Los segundos son ignorados.Cómo redondear las horas en función de los minutos (horas + 0 si mín <30, horas + 1 en caso contrario)?
ejemplo: 11/08/2008 04:30:49
debe convertirse en 11/08/2008 05:00:00
y 11/08/2008 04:29:49
debe convertirse en 11/08/2008 04:00:00
He escrito código que funciona perfectamente bien, pero sólo quería saber un mejor método si se podría escribir y también apreciaría método alternativo (s)
string date1 = "11/08/2008 04:30:49";
DateTime startTime;
DateTime.TryParseExact(date1, "MM/dd/yyyy HH:mm:ss", null,
System.Globalization.DateTimeStyles.None, out startTime);
if (Convert.ToInt32((startTime.Minute.ToString())) > 29)
{
startTime = DateTime.Parse(string.Format("{0}/{1}/{2} {3}:{4}:{5}",
startTime.Month.ToString(), startTime.Day.ToString(),
startTime.Year.ToString(), startTime.Hour.ToString(), "00", "00"));
startTime = startTime.Add(TimeSpan.Parse("01:00:00"));
Console.WriteLine("startTime is :: {0}",
startTime.ToString("MM/dd/yyyy HH:mm:ss"));
}
else
{
startTime = DateTime.Parse(string.Format("{0}/{1}/{2} {3}:{4}:{5}",
startTime.Month.ToString(),
startTime.Day.ToString(), startTime.Year.ToString(),
startTime.Hour.ToString(), "00", "00"));
Console.WriteLine("startTime is :: {0}",
startTime.ToString("MM/dd/yyyy HH:mm:ss"));
}
Gracias a todos por sus útiles comentarios y mensajes. :-) –
Sugerencias de Russell_Steen, Hans_Kesting y Hojo también son aceptables. –
posible duplicado de [¿Hay una mejor manera de recortar un DateTime con una precisión específica?] (Http://stackoverflow.com/questions/152774/is-there-a-better-way-to-trim-a-datetime -to-a-specific-precision) –