Hi,
Posting on bug-gnulib since this test failure seems to be caused by
parse-datetime despite being caught by tests/date/date-debug.sh in
Coreutils.
On NetBSD 10.0 (cfarm428.cfarm.net) it fails with the following:
+ returns_ 1 date --debug -d 'TZ="America/Edmonton" 2006-04-02 02:30:00'
+ sed '/normalized time:/s/ [0-9][0-9]:[0-9][0-9]:[0-9][0-9]/ XX:XX:XX/'
out2-t
[...]
+ diff -u exp2 out2
--- exp2 2025-06-08 23:56:08.721418060 +0000
+++ out2 2025-06-08 23:56:08.761007453 +0000
@@ -5,9 +5,8 @@
date: error: invalid date/time value:
date: user provided time: '(Y-M-D) 2006-04-02 02:30:00'
date: normalized time: '(Y-M-D) 2006-04-02 XX:XX:XX'
-date: --
+date:
date: possible reasons:
-date: nonexistent due to daylight-saving time;
date: numeric values overflow;
date: missing timezone
date: invalid date 'TZ="America/Edmonton" 2006-04-02 02:30:00'
So, on NetBSD this time is not properly recognized as being non-existent
due to daylight-savings time changes. I have confirmed that
'zdump -v America/Edmonton | grep 2006' is the same as on GNU/Linux, so
I assume this is a bug in parse-datetime or the systems time functions.
Specifically, it seems that 'mktime_ok' returns the correct value but
'dst_shift' in 'debug_mktime_not_ok' is set incorrectly:
const bool eq_hour = (tm0->tm_hour == tm1->tm_hour);
[...]
const bool dst_shift = eq_sec && eq_min && !eq_hour
&& eq_mday && eq_month && eq_year;
Running the command outside of the test-suite shows the issue:
./src/date --debug -d 'TZ="America/Edmonton" 2006-04-02 02:30:00'
[...]
date: user provided time: '(Y-M-D) 2006-04-02 02:30:00'
date: normalized time: '(Y-M-D) 2006-04-02 02:30:00'
[...]
The value of 'eq_hour' is true when it should be false, which then sets
'dst_shift' incorrectly.
Paul, do you know what the correct fix is for this? You certainly know
the time functions better than me.
Collin