Trabajo para mí, soy un codificador autónomo y, como resultado, no tengo el lujo de revisiones de código o la capacidad de mejorar en función de la programación entre iguales. Voy a usar esto como un ejercicio para ver si la comunidad de StackOverflow podría ayudar a revisar un método simple que he escrito;Refactor para la velocidad: Convertir a una fecha
internal static DateTime CONVERT_To_DateTime(int binDate)
{
// 3/10/2008 = 1822556159
// 2/10/2008 = 1822523391
// 1/10/2008 = 1822490623
// 30/09/2008 = 1822392319
// 29/09/2008 = 1822359551
// September 30th 2008
// 1822392319 = 0x6c9f7fff
// 0x6c = 108 = 2008 (based on 1900 start date)
// 0x9 = 9 = September
// 0xf7fff - take top 5 bits = 0x1e = 30
// October 1st 2008
// 1822490623 = 0x6ca0ffff
// 0 x6c = 108 = 2008
// 0 xa = 10 = October
// 0x0ffff - take top 5 bits = 0x01 = 1
// OR using Binary (used by this function)
// a = 1822556159 (3/10/2008)
// 1101100 1010 00011 111111111111111
// b = 1822523391 (2/10/2008)
// 1101100 1010 00010 111111111111111
// c = 1822490623 (1/10/2008)
// 1101100 1010 00001 111111111111111
// D = 1822392319 (30/09/2008)
// 1101100 1001 11110 111111111111111
// Excess 111111 are probably used for time/seconds which
// we do not care for at the current time
var BaseYear = 1900;
// Dump the long date to binary
var strBinary = Convert.ToString(binDate);
// Calculate the year
var strBYear = strBinary.Substring(0, 7);
var iYear = Convert.ToInt32(strBYear, 2) + BaseYear;
// Calculate the month
var strBMonth = strBinary.Substring(7, 4);
var iMonth = Convert.ToInt32(strBMonth, 2);
// Calculate the day
var strBDay = strBinary.Substring(11, 5);
var iDay = Convert.ToInt32(strBDay, 2);
// ensure that month and day have two digits
var strDay = iDay < 10 ? "0" + iDay : iDay.ToString();
var strMonth = iMonth < 10 ? "0" + iMonth : iMonth.ToString();
// Build the final date
var convertedDate = iYear + strMonth + strDay;
return DateTime.ParseExact(convertedDate, "yyyyMMdd", null);
}
Este es un método que se lleva a una representación numérica de una fecha y la convierte en un tipo de datos DateTime. Me gustaría que el método sea revisado para lograr el tiempo de ejecución más rápido posible porque se está ejecutando dentro de un ciclo.
Se agradece cualquier comentario sobre el método, ya que este será un ejercicio para mí. Espero algunas respuestas.
Siempre debe etiquetar preguntas como esta con un lenguaje de programación, para ayudar a las personas a encontrarlo. – unwind
las operaciones binarias son más rápidas usando una máscara de bits y enfoque de cambio de bit – tooleb
FYI, omitir el 0 inicial en los números binarios puede ser confuso para otros desarrolladores. Es justo esperar que se representen los 32 bits. –