Currently something as simple as adding one year to a Time is very complicated. One can't just do:
time += Gregorian.generic.toTime(1, 0, 0, 0, 0, 0, Gregorian.AD_ERA).span;
That won't work because the precise length of "one year" depends on which year is in question.
Also, that will fail because months is 0 which is an invalid value. One has to pass 1 as the month parameter, even though it won't be included in the time span. This also means that to add 1 month one has to pass 2 as the month. Intuitive much?
The basic call is something like:
time += Gregorian.generic.toTime(
Gregorian.generic.getYears(time) + 1,
1, 1, // months and days
0, 0, 0, Gregorian.generic.getYears(time) < 0 ? Gregorian.BC_ERA : Gregorian.AD_ERA).span;
Now you've got the correct year length, but the years almost doubled. So you need to use a similar procedure as above to subtract the previous year count.
In summary, everything is way too convoluted unless you want to convert to a Date in between.
Hence, Calendar needs methods addYears(Time, int) (or addYears(Time, uint, era), whatever) and similarly for addMonths, addWeeks, whatever else.