From 28f3e9f6a2ce889ceb8764afb4cc17b9bb5d65f8 Mon Sep 17 00:00:00 2001 From: deekayhd <53017684+deekayhd@users.noreply.github.com> Date: Sun, 29 Mar 2026 14:29:39 +0200 Subject: [PATCH 1/4] fix wrong month in EXIF.MONTH.LONG and EXIF_MONTH.SHORT when no date available --- lib/dtutils/string.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/dtutils/string.lua b/lib/dtutils/string.lua index 9a1085f..3f84643 100644 --- a/lib/dtutils/string.lua +++ b/lib/dtutils/string.lua @@ -774,6 +774,7 @@ function dtutils_string.build_substitute_list(image, sequence, variable_string, local labels = get_colorlabels(image) local datetime_taken = "" + local emon_long, emon_short local use_millisecs = false if dt.preferences.read("darktable", "lighttable/ui/milliseconds", "bool") and is_api_9_1 then use_millisecs = true @@ -781,12 +782,16 @@ function dtutils_string.build_substitute_list(image, sequence, variable_string, if image.exif_datetime_taken and image.exif_datetime_taken ~= "" then datetime_taken = image.exif_datetime_taken + emon_long = os.date("%B", exiftime2systime(datetime_taken)) + emon_short = os.date("%b", exiftime2systime(datetime_taken)) else if use_millisecs then datetime_taken = "0000:00:00 00:00:00.0" else datetime_taken = "0000:00:00 00:00:00" end + emon_long = _("unknown") + emon_short = "???" end local eyear, emon, eday, ehour, emin, esec, emsec @@ -840,8 +845,8 @@ function dtutils_string.build_substitute_list(image, sequence, variable_string, eyear, -- EXIF.YEAR string.sub(eyear, 3), -- EXIF.YEAR.SHORT emon, -- EXIF.MONTH - os.date("%B", exiftime2systime(datetime_taken)), -- EXIF.MONTH.LONG - os.date("%b", exiftime2systime(datetime_taken)), -- EXIF.MONTH.SHORT + emon_long, -- EXIF.MONTH.LONG + emon_short, -- EXIF.MONTH.SHORT eday, -- EXIF.DAY ehour, -- EXIF.HOUR "", -- EXIF.HOUR.AMPM From af362315e8df30621e441943a9d9a2598dc131f2 Mon Sep 17 00:00:00 2001 From: deekayhd <53017684+deekayhd@users.noreply.github.com> Date: Sun, 29 Mar 2026 23:07:25 +0200 Subject: [PATCH 2/4] set all vars derived from datetime_taken to "" --- lib/dtutils/string.lua | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/lib/dtutils/string.lua b/lib/dtutils/string.lua index 3f84643..59dbb77 100644 --- a/lib/dtutils/string.lua +++ b/lib/dtutils/string.lua @@ -773,8 +773,8 @@ function dtutils_string.build_substitute_list(image, sequence, variable_string, local labels = get_colorlabels(image) - local datetime_taken = "" local emon_long, emon_short + local eyear, emon, eday, ehour, emin, esec, emsec local use_millisecs = false if dt.preferences.read("darktable", "lighttable/ui/milliseconds", "bool") and is_api_9_1 then use_millisecs = true @@ -784,27 +784,18 @@ function dtutils_string.build_substitute_list(image, sequence, variable_string, datetime_taken = image.exif_datetime_taken emon_long = os.date("%B", exiftime2systime(datetime_taken)) emon_short = os.date("%b", exiftime2systime(datetime_taken)) - else if use_millisecs then - datetime_taken = "0000:00:00 00:00:00.0" + eyear, emon, eday, ehour, emin, esec, emsec = + string.match(datetime_taken, "(%d+):(%d+):(%d+) (%d+):(%d+):(%d+)%.(%d+)$") else - datetime_taken = "0000:00:00 00:00:00" - end - emon_long = _("unknown") - emon_short = "???" - end - - local eyear, emon, eday, ehour, emin, esec, emsec - if use_millisecs then - eyear, emon, eday, ehour, emin, esec, emsec = - string.match(datetime_taken, "(%d+):(%d+):(%d+) (%d+):(%d+):(%d+)%.(%d+)$") + emsec = "0" + eyear, emon, eday, ehour, emin, esec = + string.match(datetime_taken, "(%d+):(%d+):(%d+) (%d+):(%d+):(%d+)$") + end else - emsec = "0" - eyear, emon, eday, ehour, emin, esec = - string.match(datetime_taken, "(%d+):(%d+):(%d+) (%d+):(%d+):(%d+)$") + emon_long, emon_short, eyear, emon, eday, ehour, emin, esec, emsec = "" end - local version_multi = #image:get_group_members() > 1 and image.duplicate_index or "" local replacements = {dtutils_string.get_basename(image.film.path),-- ROLL.NAME @@ -843,7 +834,7 @@ function dtutils_string.build_substitute_list(image, sequence, variable_string, string.format("%02d", datetime.sec), -- SECOND 0, -- MSEC eyear, -- EXIF.YEAR - string.sub(eyear, 3), -- EXIF.YEAR.SHORT + (eyear ~= nil) and string.sub(eyear, 3) or "", -- EXIF.YEAR.SHORT emon, -- EXIF.MONTH emon_long, -- EXIF.MONTH.LONG emon_short, -- EXIF.MONTH.SHORT From 80ff1ef0aaac87e13b95a84fa6bf674661a8197f Mon Sep 17 00:00:00 2001 From: deekayhd <53017684+deekayhd@users.noreply.github.com> Date: Sun, 29 Mar 2026 23:33:23 +0200 Subject: [PATCH 3/4] add warning message --- lib/dtutils/string.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/dtutils/string.lua b/lib/dtutils/string.lua index 59dbb77..38a17f4 100644 --- a/lib/dtutils/string.lua +++ b/lib/dtutils/string.lua @@ -793,6 +793,7 @@ function dtutils_string.build_substitute_list(image, sequence, variable_string, string.match(datetime_taken, "(%d+):(%d+):(%d+) (%d+):(%d+):(%d+)$") end else + log.msg(log.warn, "no capture datetime found in EXIF data") emon_long, emon_short, eyear, emon, eday, ehour, emin, esec, emsec = "" end From 4d3924939bde280dbd2e281e6881d732276e106d Mon Sep 17 00:00:00 2001 From: deekayhd <53017684+deekayhd@users.noreply.github.com> Date: Sun, 29 Mar 2026 23:45:40 +0200 Subject: [PATCH 4/4] remove unnecessary variable datetime_taken --- lib/dtutils/string.lua | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/dtutils/string.lua b/lib/dtutils/string.lua index 38a17f4..c03bd66 100644 --- a/lib/dtutils/string.lua +++ b/lib/dtutils/string.lua @@ -781,9 +781,8 @@ function dtutils_string.build_substitute_list(image, sequence, variable_string, end if image.exif_datetime_taken and image.exif_datetime_taken ~= "" then - datetime_taken = image.exif_datetime_taken - emon_long = os.date("%B", exiftime2systime(datetime_taken)) - emon_short = os.date("%b", exiftime2systime(datetime_taken)) + emon_long = os.date("%B", exiftime2systime(image.exif_datetime_taken)) + emon_short = os.date("%b", exiftime2systime(image.exif_datetime_taken)) if use_millisecs then eyear, emon, eday, ehour, emin, esec, emsec = string.match(datetime_taken, "(%d+):(%d+):(%d+) (%d+):(%d+):(%d+)%.(%d+)$") @@ -793,7 +792,7 @@ function dtutils_string.build_substitute_list(image, sequence, variable_string, string.match(datetime_taken, "(%d+):(%d+):(%d+) (%d+):(%d+):(%d+)$") end else - log.msg(log.warn, "no capture datetime found in EXIF data") + log.msg(log.warn, "no capture date and time found in EXIF data") emon_long, emon_short, eyear, emon, eday, ehour, emin, esec, emsec = "" end