Ich arbeite für mich selbst, bin ein selbständiger Programmierer und als Ergebnis habe ich nicht den Luxus von Code-Reviews oder die Fähigkeit, basierend auf Peer-Programmierung zu verbessern. Ich werde dies als Übung verwenden, um zu sehen, ob die StackOverflow-Community helfen könnte, eine einfache Methode, die ich geschrieben habe, zu überprüfen;Refactor für Geschwindigkeit: Konvertieren zu einem Datum
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);
}
Dies ist eine Methode, die eine numerische Darstellung eines Datums erfolgt und wandelt es in einem DateTime- Datentyp. Ich möchte, dass die Methode überprüft wird, um die schnellstmögliche Ausführungszeit zu erreichen, da sie innerhalb einer Schleife ausgeführt wird.
Alle Kommentare zu der Methode wird geschätzt, da dies eine Übung für mich sein wird. Ich freue mich auf einige Antworten.
Sie sollten immer Fragen wie folgt mit einer Programmiersprache markieren, um Menschen zu helfen, es zu finden. – unwind
binäre Operationen gehen schneller mit einer Bitmaske und Bit-Shift-Ansatz – tooleb
FYI, die führende 0 in Ihren Binärzahlen weglassen kann für andere Entwickler verwirrend sein. Es ist fair zu erwarten, dass alle 32 Bits dargestellt werden. –