Tôi làm việc cho bản thân mình, tôi là một lập trình viên tự làm chủ và kết quả là tôi không có sự đánh giá mã sang trọng hoặc khả năng cải thiện dựa trên lập trình ngang hàng. Tôi sẽ sử dụng điều này như một bài tập để xem liệu cộng đồng StackOverflow có thể giúp xem xét một phương pháp đơn giản mà tôi đã viết hay không;Refactor for Speed: Chuyển đổi thành ngày
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);
}
Đây là phương pháp biểu diễn số ngày và chuyển đổi thành Loại dữ liệu ngày giờ. Tôi muốn phương pháp được xem xét để đạt được thời gian thực thi nhanh nhất có thể bởi vì nó được thực thi trong vòng lặp.
Bất kỳ nhận xét nào về phương pháp đều được đánh giá cao vì đây sẽ là bài tập cho tôi. tôi mong đợi một số câu trả lời.
Bạn nên luôn gắn thẻ các câu hỏi như thế này bằng ngôn ngữ lập trình để giúp mọi người tìm thấy nó. – unwind
hoạt động nhị phân sẽ nhanh hơn bằng cách sử dụng mặt nạ bit và phương pháp thay đổi bit – tooleb
FYI, bỏ qua số 0 hàng đầu trong số nhị phân của bạn có thể gây nhầm lẫn cho các nhà phát triển khác. Đó là công bằng để mong đợi tất cả 32 bit được đại diện. –