The simple command-line program jhead is great for this. It's completely free (and open source) and is easily available for Windows, Mac, or Linux. If you're not used to command-line programs, this is a pretty non-intimidating one because there's not a lot to it. You have to format the dates correctly, but it's easy to do by following the examples (see the documentation I've included below).
It has a simple adjust by-hours command, but for big changes it also has an old -> new syntax which computes the difference for you (so you don't have to worry about leap years and so on). If you happen to have the wrong-set camera still at hand and still wrong, I find it handy to take a shot of a (time-synced) digital clock — then, take the date shown in the picture as "newdate" and the date in the metadata as "olddate" for the parameters below.
From the documentation:
Adjust time stored in the Exif header by h:mm backwards or for-
wards. Useful when having taken pictures with the wrong time
set on the camera, such as after travelling across time zones,
or when daylight savings time has changed.
This option changes all Date/time fields in the exif header,
including "DateTimeOriginal" (tag 0x9003) and "DateTimeDigi-
tized" (tag 0x9004).
Works like -ta, but for specifying large date offsets, to be
used when fixing dates from cameras where the date was set
incorrectly, such as having date and time reset by battery
removal on some cameras
Because different months and years have different numbers of
days in them, a simple offset for months, days, years would lead
to unexpected results at times. The time offset is thus speci-
fied as a difference between two dates, so that jhead can figure
out exactly how many days the timestamp needs to be adjusted by,
including leap years and daylight savings time changes. The
dates are specified as yyyy:mm:dd. For sub-day adjustments, a
time of day can also be included, by specifying yyyy:nn:dd/hh:mm
Year on camera was set to 2005 instead of 2004 for pictures
taken in April
Default camera date is 2002:01:01, and date was reset on
2005:05:29 at 11:21 am