How can one bulk time-shift the creation date of JPG images? (OS X)

Solution 1:

There will be quite a few tools that work on the JPEG EXIF fields.
I have always found Phil Harvey's EXIFTool to be fantastic.

Mac OS X Package: ExifTool-7.98.dmg (1.4 MB).
The OS X package installs the ExifTool command-line application and libraries in /usr/bin.
After installing, type "exiftool" in a Terminal window to run exiftool and read the application documentation.

What you are looking for now is,

Date/Time Shift Feature
Have you ever forgotten to set the date/time on your digital camera before taking a bunch of pictures? ExifTool has a time shift feature that makes it easy to apply a batch fix to the timestamps of the images (ie. change the "Date Picture Taken" reported by Windows Explorer).

Say for example that your camera clock was reset to 2000:01:01 00:00:00
when you put in a new battery at 2005:11:03 10:48:00
.
Then all of the pictures you took subsequently have timestamps that are wrong by
5 years, 10 months, 2 days, 10 hours and 48 minutes.

To fix this, put all of the images in the same directory ("DIR") and run exiftool,

exiftool "-DateTimeOriginal+=5:10:2 10:48:0" DIR
          =================^^^^^^^^^^^^^^^^

You need to adjust the incorrectly stamped batch to just two days forward.


Update: Towards working with Create and Modify times for iPhoto,
EXIFTool notes continue at the Date/Time Shift Feature section,

The example above changes only the DateTimeOriginal tag,
but any writable date or time tag can be shifted,
and multiple tags may be written with a single command line.

Commonly, in JPEG images, the DateTimeOriginal, CreateDate and ModifyDate values must all be changed.

For convenience, a shortcut tag called AllDates has been defined to represent these three tags.
So, for example, if you forgot to set your camera clock back 1 hour at the end of daylight savings time in the fall, you can fix the images with:

exiftool "-AllDates-=1" DIR
          =========^^^

This will roll back all timestamps by 1 hour.
Hopefully, your original files are available for doing this...

Finally, if you have the original meta data corrected,
but with incorrect file time
.
You can do the following,

exiftool "-DateTimeOriginal>FileModifyDate" DIR
                           ^

This will push the corrected EXIF timestamp to the file modify time.

Solution 2:

If iPhoto uses the filesystem date/time, just do this to set it from the EXIF information:

exiftool "-filemodifydate<datetimeoriginal" DIR

before importing into iPhoto

No need to screw up your metadata

Solution 3:

nik's answer definitely worked for the EXIF data in the files (for the information of those who find this thread looking for an answer, what follows is the command I used to update-in-place the EXIF data of the offending photos):

~/Pictures/iPhoto Library/Originals/2009$ exiftool -P -AllDates+='0:0:1 2:00:00' - overwrite_original_in_place -if '$make eq "Canon"' "My Import Name Here"

Of course, this didn't solve the problem, because iPhoto is ignoring the EXIF date and organizing via either the create date or whatever's in its database.

New solution: I'm an idiot and iPhoto '08 and beyond actually added the time adjust feature to it: Menu item Photo -> Adjust Date and Time. It actually creates a new file and screws up just about all the original EXIF data, but at least the photos finally organize properly in iPhoto.

Solution 4:

This worked to change all EXIF-dates (+=24 hours) taken with a Sony-Cam:

exiftool "-AllDates+=24 -SonyDateTime+=24" DIR

In a 2nd step i changed the file-modify-date to match the exif-dates:

exiftool "-DateTimeOriginal>FileModifyDate" DIR

Seems that DateTimeOriginal takes its values from SonyDateTime.