You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

97 lines
4.1 KiB

#------------------------------------------------------------------------------
# File: time_zone.config
#
# Description: ExifTool config file to return time zone from an image
#
# Notes: The Composite:TimeZone tag defined here attempts to determine
# the time zone for an image. If possible, the camera time zone
# is used, if that does not exist, the time zone for
# DateTimeOriginal is returned, but if this can't be determined
# then the time zone for CreateDate and then ModifyDate are used.
# If this all does not result in a time zone, the timezone of the
# TimeCreated tag is used
#
# Usage: exiftool -config time_zone.config -timezone FILE
#
# Requires: ExifTool version 7.74 or later
#
# Revisions: 2016/10/03 - P. Harvey Created
# 2016/12/12 - H. Baan Corrected tag name, added support for
# camera time zone/daylight savings info in
# MakerNotes
# 2017/01/05 - H. Baan Handle case were GPSDateStamp is missing
# 2017/01/06 - H. Baan Use QuickTime:CreationDate if available
# 2017/03/12 - H. Baan Added QuickTime:TimeZone, reordered
# Desired tags according to precedence, added
# comments
#------------------------------------------------------------------------------
%Image::ExifTool::UserDefined = (
'Image::ExifTool::Composite' => {
# Calculate the TimeZone of the picture taken
TimeZone => {
Desire => {
# TimeZone information tags ordered by precedence
0 => 'MakerNotes:TimeZone',
1 => 'MakerNotes:DaylightSavings',
2 => 'QuickTime:TimeZone',
3 => 'OffsetTimeOriginal',
4 => 'OffsetTimeDigitized',
5 => 'OffsetTime',
6 => 'TimeZoneOffset',
7 => 'GPSDateStamp',
8 => 'GPSTimeStamp',
9 => 'DateTimeOriginal',
10 => 'DateTimeDigitized',
11 => 'CreateDate',
12 => 'ModifyDate',
13 => 'QuickTime:CreationDate',
14 => 'TimeCreated',
},
RawConv => q{
# TimeZone from MakeNotes (camera setting)
return TimeZoneString($val[0] + ($val[1] ? 60 : 0)) if defined $val[0];
# TimeZone from QuickTime (camera setting)
return TimeZoneString($val[2]) if $val[2];
# TimeZone from offset fields
return $val[3] if $val[3]; # DateTimeOriginal
return $val[4] if $val[4]; # DateTimeDigitized
return $val[5] if $val[5]; # (ModifyDate)
if (defined $val[6]) { # (ModifyDate)
my $tzh = $val[6];
$tzh =~ s/ .*//;
return TimeZoneString($tzh * 60);
}
# Difference between GPS and local time as TimeZone
if (defined $val[8]) {
my $loc = $val[9] || $val[10] || $val[11] || $val[12];
if ($loc) {
my @loc = split /[: ]/, $loc;
my @gmt = split /[: ]/, ($val[7]||"$loc[0]:$loc[1]:$loc[2]") . " $val[8]";
my $tzm = 15 * sprintf("%.0f", (GetTimeZone([@loc[5,4,3,2]], [@gmt[5,4,3,2]])) / 15);
$tzm -= 1440 if $tzm > 840;
$tzm += 1440 if $tzm < -720;
return TimeZoneString($tzm);
}
}
# TimeZone from QuickTime Creation Date
if ($val[13] && $val[13] =~ /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}([+-]\d{2})(\d{2})/) {
return TimeZoneString($1 * 60 + $2);
}
# Time Created
if ($val[14] && $val[14] =~ /\d{6}([+-]\d{2})(\d{2})/) {
return TimeZoneString($1 * 60 + $2);
}
return undef;
},
},
},
);
1; #end