diff -urp coreutils-6.9-orig/lib/getdate.y coreutils-6.9/lib/getdate.y --- coreutils-6.9-orig/lib/getdate.y 2007-02-23 19:25:21.000000000 +0100 +++ coreutils-6.9/lib/getdate.y 2007-11-16 18:12:17.000000000 +0100 @@ -446,7 +446,43 @@ date: ; rel: - relunit tAGO + tUNUMBER relunit_snumber + { + /* Hybrid between date and relative for YYYYMMDD/YYMMDD date format + for which was YYYYMMDD +X days considered as wrong format */ + pc->rel.ns += $2.ns; + pc->rel.seconds += $2.seconds; + pc->rel.minutes += $2.minutes; + pc->rel.hour += $2.hour; + pc->rel.day += $2.day; + pc->rel.month += $2.month; + pc->rel.year += $2.year; + pc->rels_seen = true; + if (4 < $1.digits) + { + pc->day = $1.value % 100; + pc->month = ($1.value / 100) % 100; + pc->year.value = $1.value / 10000; + pc->year.digits = $1.digits - 4; + pc->dates_seen = true; + } else { + pc->times_seen++; + if ($1.digits <= 2) + { + pc->hour = $1.value; + pc->minutes = 0; + } + else + { + pc->hour = $1.value / 100; + pc->minutes = $1.value % 100; + } + pc->seconds.tv_sec = 0; + pc->seconds.tv_nsec = 0; + pc->meridian = MER24; + } + } + | relunit tAGO { pc->rel.ns -= $1.ns; pc->rel.seconds -= $1.seconds;