I was able to modify the solution provided by Brad Christie to get the results I am expecting for the Hours, Minutes, Seconds, Months, Days, and Years all of which are in BCD Format:
static Int32 GetYearFromBCD(Int32 time)
{
int length = time.ToString().Length -1;
List<Int32> YearList = new List<Int32>();
for (Int32 i = length; i >= 0; i --)
{
Int32 place = i * 4;
Int32 val = 0x01 << place;
Int32 curVal = (Int32)(time / val);
if (curVal > 9 && YearList.Count > 0)
{
Int32 delta = (Int32)(curVal / 10);
YearList[YearList.Count - 1] += delta;
curVal -= delta * 10;
}
YearList.Add(curVal);
time -= curVal << place;
}
Int32 Year = 0;
for (Int32 y = 0; y < YearList.Count; y++)
Year += YearList[y] * (Int32)Math.Pow(10,(length+1 - y)-1);
return Year;
}
I wanted to provide an update to this question. After the device was running for several days through New Years, I was able to full confirm that the code solution Brad posted does exactly what we will need.
I was able to confirm my suspicions that the expected value was indeed a Binary Coded Decmial, I was able to confirm that the value expected only works has a HEX value. A co-worker was able to independently confirm the time and date, using table for the standard, so I feel comfortable putting this to bed.
I was able to confirm that for whatever reason the decmial value of the data does not work, I can only conclude the data is being sent as a hex value by the device, my only concern is will other applications work in a similar method.
I appreciate everyone's help in figuring this out, some of the comments lead me down a path that allow me to figure out.