Je travaille pour moi-même, je suis un codeur indépendant et par conséquent, je n'ai pas le luxe de critiques de code ou la possibilité d'améliorer en fonction de la programmation par les pairs. Je vais utiliser cela comme un exercice pour voir si la communauté StackOverflow pourrait aider à revoir une méthode simple que j'ai écrite;Refactor pour la vitesse: Convertir en une date
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);
}
C'est une méthode qui prend une représentation numérique d'une date et il se transforme en un type de données DateTime. Je voudrais que la méthode soit revue pour atteindre le temps d'exécution le plus rapide possible car elle est exécutée dans une boucle.
Tous les commentaires sur la méthode est apprécié car ce sera un exercice pour moi. J'attends avec impatience quelques réponses.
Vous devriez toujours étiqueter des questions comme celles-ci avec un langage de programmation, pour aider les gens à les trouver. – unwind
opérations binaires vont plus vite en utilisant un masque de bits et approche de décalage de bits – tooleb
FYI, en omettant le 0 principal dans vos nombres binaires peut être source de confusion pour d'autres développeurs. Il est juste de s'attendre à ce que tous les 32 bits soient représentés. –