¿De verdad no tiene esto el Framework?...
Escribo este post por dos motivos: uno que quiza a alguien le sirva esta funcioncita y dos, que quizás alguien me ayude con mi dilema. Ya se que esto es mucho más mundano que los retos de Programacia101... pero bueno.
Necesito calcular las horas transcuridas en el año para un fecha y hora dadas. La única manera de solucionar el problema que he encontrado es con la función que muestro abajo, pero no puedo creer que no haya una manera más elegante de solucionar este problema. Incluso sospecho que debe de haber algún método del Framework que haga esto directamente pero no doy con él.
/// <summary>
/// Dada una fecha, nos devuelve el número de horas que han trascurrido
/// desde comienzo de año
/// </summary>
/// <param name="date">
/// Fecha para la que queremos las horas desde el inicio de año
/// </param>
private static short GetHoursOnYear(DateTime date)
{
DateTime beginOfYear = new DateTime(date.Year, 1, 1, 0, 0, 0);
TimeSpan diff = date - beginOfYear;
double diffHours = diff.TotalHours;
Debug.Assert(diffHours <= 24 * 365);
return (short)diffHours;
}
NOTA: Después de darle algunas vueltas entre todos (ver los comentarios), la función, definitivamente a quedad así:
private static short GetHoursOnYear(DateTime dateTime)
{
return (short)((dateTime.DayOfYear - 1) * 24 + dateTime.Hour);
}