Jacek Caban (@jacek) commented about dlls/wininet/internet.c:
static BOOL calc_year(SYSTEMTIME* time, const WCHAR **s) { WCHAR *end;
WORD current_year = time->wYear;
WORD current_millennium;
if (**s == '\0') return TRUE; time->wYear = wcstol( *s, &end, 10 );
if (100 > time->wYear)
{
current_millennium = current_year - (current_year % 1000);
if (time->wYear + current_millennium > current_year)
time->wYear += (current_millennium - 100);
else
time->wYear += current_millennium;
This doesn't seem reliable, since it prevents using the short form for future dates. A quick check on Windows suggests that 80 is used to distinguish between the 1900s and the 2000s. I'm also not sure we should rely on the current time to pick the millennium, it seems reasonable to hardcode that so the short form remains consistent, and expect the long form for dates past 2080.