I have two functions, one to convert a datetime to a hex word, and one to convert a word to a datetime. I was just wondering if there was a more efficient way to convert back and forth.
/// <summary>
/// Converts a date time to a hexadecimal word
/// </summary>
/// <param name="date">the date time</param>
/// <returns>returns the Hex value of the date</returns>
private int convertToWordFromDate(DateTime date)
{
int m, d, y;
int month = date.Month;
int day = date.Day;
int year = int.Parse(date.Year.ToString().Substring(2, 2));
int yearShift = 9;
int monthShift = 5;
int word;
y = year << yearShift;
m = month << monthShift;
d = day;
if (year == 0)
word = m + d + (y * 100);
if (year < 10)
word = (m + d + y) * 16;
else
word = m + d + y;
return word;
}
/// <summary>
/// Converts a hexadecimal word to a valid dateTime
/// </summary>
/// <param name="word">the word</param>
/// <returns>the date time</returns>
private DateTime convertToDateFromWord(int word)
{
int month, day, year;
int monthMask = 0x01E0;
int dayMask = 0x001F;
int yearMask = 0xFE00;
int monthShift = 32;
int yearShift = 512;
DateTime date = new DateTime();
try
{
year = (word & yearMask) / yearShift;
month = (word & monthMask) / monthShift;
day = (word & dayMask);
if (year >= 80 && year <= 99)
year += 1900;
else if (year >= 0 && year <= 79)
year += 2000;
else if (year < 0 || month <= 0 || day <= 0)
{
year = 1;
month = 1;
day = 1;
}
else
{
year = 1;
month = 1;
day = 1;
}
date = new DateTime(year, month, day);
}
catch
{
date = new DateTime(1, 1, 1);
}
return date;
}