2025-07-02: ExifTool 13.32 is now available
% exiftool a.jpg -xmp:datetimeoriginal'=2025:06:16 19:41:49-0700' -v2
Writing XMP-exif:DateTimeOriginal
======== a.jpg
Rewriting a.jpg...
Editing tags in: APP1 XMP
Creating tags in: APP1 XMP
JPEG APP1 (11914 bytes)
JPEG APP1 (1119 bytes)
Rewriting XMP
+ XMP-exif:DateTimeOriginal = '2025-06-16T19:41:49-07:00'
JPEG APP5 (49950 bytes)
JPEG DQT (130 bytes)
JPEG SOF0:
JPEG DHT (416 bytes)
JPEG SOS
1 image files updated
| + [ExifIFD directory with 40 entries]
| | 0) ExposureTime = 0.02 (1/50)
| | - Tag 0x829a (8 bytes, rational64u[1])
| | 1) FNumber = 4 (40/10)
| | - Tag 0x829d (8 bytes, rational64u[1])
| | 2) ExposureProgram = 2
| | - Tag 0x8822 (2 bytes, int16u[1])
| | 3) ISO = 6400
| | - Tag 0x8827 (2 bytes, int16u[1])
| | 4) TimeZoneOffset = -7
| | - Tag 0x882a (2 bytes, int16s[1])
| | 5) SensitivityType = 2
| | - Tag 0x8830 (2 bytes, int16u[1])
| | 6) RecommendedExposureIndex = 6400
| | - Tag 0x8832 (4 bytes, int32u[1])
| | 7) ExifVersion = 0231
| | - Tag 0x9000 (4 bytes, undef[4])
| | 8) DateTimeOriginal = 2025:06:16 19:41:49
| | - Tag 0x9003 (20 bytes, string[20])
| | 9) CreateDate = 2025:06:16 19:41:49-0700
| | - Tag 0x9004 (25 bytes, string[25])
+ [XMP directory, 5526 bytes]
| XMPToolkit = XMP Core 4.4.0-Exiv2
| Warning = [minor] Fixed incorrect URI for xmlns:MicrosoftPhoto
| CountryCode = USA
| - Tag 'x:xmpmeta/rdf:RDF/rdf:Description/Iptc4xmpCore:CountryCode'
| Location = Bow Lake Residential Mobile Home Community
| - Tag 'x:xmpmeta/rdf:RDF/rdf:Description/Iptc4xmpCore:Location'
| ColorLabel = 0
| - Tag 'x:xmpmeta/rdf:RDF/rdf:Description/digiKam:ColorLabel'
| DateTimeDigitized = 2025-06-16T19:41:49-07:00
| - Tag 'x:xmpmeta/rdf:RDF/rdf:Description/exif:DateTimeDigitized'
| DateTimeOriginal = 2025-06-16T19:41:49
| - Tag 'x:xmpmeta/rdf:RDF/rdf:Description/exif:DateTimeOriginal'
| GPSAltitude = 104/1
| - Tag 'x:xmpmeta/rdf:RDF/rdf:Description/exif:GPSAltitude'
Quote from: Kloomnik on July 06, 2025, 05:18:24 PMI want to concatenate several existing EXIF fields (e.g., Caption, City, State, Country) into that single field.
Loading DB routines from perl5db.pl version 1.80
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
IO::Socket::SSL::CODE(0xa037ee6d0)(/usr/share/perl5/vendor_perl/5.40/IO/Socket/SSL.pm:276):
276: INIT { init() }
277: init();
DB<1> n
main::(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:41):
41: my $exifTool = new Image::ExifTool;
DB<1>
main::(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:42):
42: my $geo = My::GeoNames->new(username => USERNAME);
DB<1> b 1125
DB<2> c
main::TzUpdate(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:1125):
1125: my $timestamp_str = $exifTool->GetValue($tag);
DB<2> p $tag
XMP:DateTimeOriginal
DB<3> n
main::TzUpdate(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:1126):
1126: if ($timestamp_str) {
DB<3> p $timestamp_str
2025:06:16 21:41:49-07:00
DB<4> n
main::TzUpdate(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:1129):
1129: if ($timestamp_str =~ /(\d{4}):(\d{2}):(\d{2}) (\d{2}):(\d{2}):(\d{2})/) {
DB<4>
main::TzUpdate(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:1130):
1130: my ($year, $month, $day, $hour, $minute, $second) = ($1, $2, $3, $4, $5, $6);
DB<4>
main::TzUpdate(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:1133):
1133: my $original_dt = DateTime->new(
1134: year => $year,
1135: month => $month,
1136: day => $day,
1137: hour => $hour,
1138: minute => $minute,
1139: second => $second,
1140: time_zone => 'America/Chicago' # Assume Central time
1141: );
DB<4>
main::TzUpdate(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:1144):
1144: $original_dt->set_time_zone($location_timezone);
DB<4>
main::TzUpdate(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:1147):
1147: my $adjusted_timestamp = $original_dt->ymd(':') . ' ' . $original_dt->hms(':') . $original_dt->strftime('%z');
DB<4>
main::TzUpdate(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:1150):
1150: $exifTool->SetNewValue($tag, $adjusted_timestamp);
DB<4> p $adjusted_timestamp
2025:06:16 19:41:49-0700
DB<5> p $tag
XMP:DateTimeOriginal
DB<6> n
main::TzUpdate(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:1154):
1154: $updates = 1; # we'll always update
DB<6>
main::(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:91):
91: if ($unique) {
DB<6>
main::(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:94):
94: if ($updates && !$try) {
DB<6>
main::(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:95):
95: $exifTool->WriteInfo($fn);
DB<6>
main::(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:96):
96: $updates = 0;
DB<6>
main::(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:98):
98: if (defined $geoError) {
DB<6>
main::(/cygdrive/c/Users/Tom/Pictures/Metadata/EXIF/ExifTool/exiftidy.pl:125):
125: exit;
DB<6>
Debugged program terminated. Use q to quit or R to restart,
use o inhibit_exit to avoid stopping after program termination,
S<h q>, S<h R> or S<h o> to get additional info.
DB<6>
$ exiftool -time:all -G1 -a -s pic.jpg
[System] FileModifyDate : 2025:07:06 22:41:13+01:00
[System] FileAccessDate : 2025:07:06 23:09:20+01:00
[System] FileCreateDate : 2025:07:06 20:09:53+01:00
[IFD0] ModifyDate : 2025:06:16 19:41:49-0700
[ExifIFD] DateTimeOriginal : 2025:06:16 19:41:49-0700
[ExifIFD] CreateDate : 2025:06:16 19:41:49-0700
[ExifIFD] OffsetTime : -05:00
[ExifIFD] OffsetTimeOriginal : -05:00
[ExifIFD] OffsetTimeDigitized : -05:00
[Sony] SonyDateTime : 2025:06:16 21:41:49
[GPS] GPSTimeStamp : 04:41:49
[GPS] GPSDateStamp : 2025:06:17
[IFD1] ModifyDate : 2025:06:16 19:41:49-0700
[XMP-exif] DateTimeDigitized : 2025:06:16 19:41:49-07:00
[XMP-exif] DateTimeOriginal : 2025:06:16 21:41:49-07:00
[XMP-exif] GPSDateTime : 2025:06:17 04:41:49Z
[XMP-xmp] ModifyDate : 2025:06:16 21:41:49-07:00
[Composite] GPSDateTime : 2025:06:17 04:41:49Z