This seems to be an issue with every ISO8601 module I've seen:
A bare year is a legal ISO8601 date but it's impossible to tell the difference after parsing
between for example:
1900
and
1900-01-01
as the month and day always defaults to "1". This means once you have the $dt object, there is
no way of knowing whether you were passed a bare year or the date <year>-01-01 and so you
lose information.