In C, there aren't so much use cases that qualify for bitfields, but this one is a perfect fit IMHO since it saves you a lot of headaches from bit shifting:
struct date_struct
{
unsigned short year:7;
unsigned short month:4;
unsigned short day:5;
};
union date
{
struct date_struct bits;
short date;
}