> I have to use bit fields now to extract the memory.
The ordering of bitfields is implementation defined.

Code:
struct foo {
    int field : 6;
};
Assume for the moment that the allocated storage unit is a short int (for clarity).
There is nothing in the standard which says that you would end up with these bits.
???????? ??xxxxxx

It is also perfectly acceptable for your compiler to choose to do this.
xxxxxx?? ????????

Having read a date, you could try this bit of debugging to see if your date bits make any sense just after reading them in.
Code:
unsigned short foo[3];  // same size as Date
memcpy(foo,&myRecord.myDate,3);
printf("Date Bits=%04x %04x %04x\n", foo[0],foo[1],foo[2]);
You can then also use the same idea to explore how your bitfields are packed.
Code:
memset(&myRecord,0,sizeof(myRecord);
myRecord.year = ~0;  // set all the bits for year
memcpy(foo,&myRecord.myDate,3);
printf("Date Bits=%04x %04x %04x\n", foo[0],foo[1],foo[2]);
The hypothesis is that foo[0] should be 0x007f.