The value returned is a SYSTEMTIME struct, which has the year, month, day, dayofweek, and time (to the millisecond). You can manually add days/months/years to the struct or there may be some built-ins (haven't looked into it :).
SYSTEMTIME st;
FILETIME ft;
GetSystemTime(&st);
//GetLocalTime(&st);
SystemTimeToFileTime(&st, &ft);
ULARGE_INTEGER ftAsULargeInt;
memcpy(&ftAsULargeInt, &ft, sizeof(ftAsULargeInt));
constdouble secondsPer100ns = 100.*1.e-9;
constdouble minutesPer100ns = secondsPer100ns*60;
constdouble hoursPer100ns = minutesPer100ns*60;
constdouble daysPer100ns = hoursPer100ns*24;
//add 5 days
ftAsULargeInt.QuadPart += (double) 5 / daysPer100ns;
//add 3 months (assume current month is July) (will have to do some manual calculations here to
//actually only add three to the months component)
ftAsULargeInt.QuadPart += (double) (31 + 31 + 30) / daysPer100ns; //31 days in July and August, 30 in September
//add 1 year (this year is not a leap year) (again, will have to do some manual calculations here to actually
//only add one to the year component)
ftAsULargeInt.QuadPart += (double) 365 / daysPer100ns;
//convert back to file time
memcpy(&ft, &ftAsULargeInt, sizeof(ft));
//convert back to system time
FileTimeToSystemTime(&ft, &st);
//can now access the modified date!
WORD day = st.wDay;
WORD month = st.wMonth;
WORD year = st.wYear;