From 3bce1260e7ef31b6b7bdde9d3781eb1264d68f37 Mon Sep 17 00:00:00 2001 From: drh <> Date: Sat, 17 Oct 2026 13:23:07 +0000 Subject: [PATCH] Fix 24:00:00 rounding of dates with negative years. [forum:/info/2026-10-17T12:57:32Z|Forum post 2026-10-17T12:57:32Z] FossilOrigin-Name: 91515aa82e05f32db4b5d126d762d730cf424735edc4ef59a696ad581f4ca1ab --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/date.c | 3 ++- test/date.test | 2 ++ 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 3d04001e17..55724a251b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\srecent\sbranch-3.54\sfixes\sinto\strunk. -D 2026-10-17T12:10:02.088 +C Fix\s24:00:00\srounding\sof\sdates\swith\snegative\syears.\n[forum:/info/2026-10-17T12:57:32Z|Forum\spost\s2026-10-17T12:57:32Z] +D 2026-10-17T13:23:07.702 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -751,7 +751,7 @@ F src/build.c 1406d252bc5b2c3f2150edd4426e5981eabf1000944be8db8d470b96eb64ee07 F src/callback.c 3605bbf02bd7ed46c79cd48346db4a32fc51d67624400539c0532f4eead804ad F src/carray.c 22879bbd9e14fc4868f223b0d49bcdbbda4616c89f1519ec6a5e64b98a4137b1 F src/complete.c f68f545b9c6c19e2e848672dc0e4da230072fedc335d8980b55242cc4cfa60da -F src/date.c 7719f64947e718a38897af459259eeac1aeda7daf7b87860c4d37fc687101004 +F src/date.c a55811d8e799ef76f3da9abf5a976dbe799208113f1da94ee25ae0aec2a14707 F src/dbpage.c ec8590c5e7a564cef28ca3c6156521316a4d26cb572a34841b0bcb26b67b3f97 F src/dbstat.c 34d4e825fbf763640ce3dbc56910ab080495ef4a6efb48b2b1852a43d43763fc F src/delete.c f3f07c1fb6ac87fac2425d48fd40ecb2f24a4495a9966f5a939668d3576916c8 @@ -1107,7 +1107,7 @@ F test/ctime.test 340f362f41f92972bbd71f44e10569a5cc694062b692231bd08aa6fe6c1c47 F test/cursorhint.test d8b93ac48dfdb2cf4284142710d63e860b6497afff2e9c525daf752a229e5b97 F test/cursorhint2.test a10f29c0c52d4d73c19cf639f3c33cccbf5024bcf950fa48f2a8cdc14628b985 F test/dataversion1.test 6e5e86ac681f0782e766ebcb56c019ae001522d114e0e111e5ebf68ccf2a7bb8 -F test/date.test e71d1c3640a6d1a59a8ea94b52dbe934ecaaeecd9e9db73ee1d10d27a5a6aece +F test/date.test 44385e98b072d7590aba7bb98ba8ee23d8d9b116ed0d80579bf07a30a1944537 F test/date2.test 7e12ec14aaf4d5e6294b4ba140445b0eca06ea50062a9c3a69c4ee13d0b6f8b1 F test/date3.test a1b77abf05c6772fe5ca2337cac1398892f2a41e62bce7e6be0f4a08a0e64ae5 F test/date4.test b5ad22baf7394e008ac59383840159daedd45be31dcf74a3b2450ec0e28955ce @@ -2291,8 +2291,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P e30e6624c492eba43cc79bf2c3af2f435e7cc449af8e6fc9d9f12a463ba7910e c5d67762df0507fe58e035b572623f36efb394d08d322bbdb313a2f0da49c734 -R b6a14446d281beace891477835cb7680 +P c75eff906c11d8f17ae198e5f6cfea34636df2bde0104440fd0b6983ddb2f918 +R a999eb0745080bfad68b581e814ac320 U drh -Z bc64e40a1711427191cc2570f6c0be4b +Z 433d96aede92648bc82f0127728fe0ea # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 31f64fd17e..e4fbea97bf 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c75eff906c11d8f17ae198e5f6cfea34636df2bde0104440fd0b6983ddb2f918 +91515aa82e05f32db4b5d126d762d730cf424735edc4ef59a696ad581f4ca1ab diff --git a/src/date.c b/src/date.c index 339de09ac5..e3b7d047b8 100644 --- a/src/date.c +++ b/src/date.c @@ -356,6 +356,7 @@ static int parseYyyyMmDd(const char *zDate, DateTime *p){ if( getDigits(zDate, "40f-21a-21d", &Y, &M, &D)!=3 ){ return 1; } + if( neg ) Y = -Y; zDate += 10; while( sqlite3Isspace(*zDate) || 'T'==*(u8*)zDate ){ zDate++; } if( parseHhMmSs(zDate, p)==0 ){ @@ -379,7 +380,7 @@ static int parseYyyyMmDd(const char *zDate, DateTime *p){ } p->validJD = 0; p->validYMD = 1; - p->Y = neg ? -Y : Y; + p->Y = Y; p->M = M; p->D = D; computeFloor(p); diff --git a/test/date.test b/test/date.test index a5f2c6d460..24529bb7bc 100644 --- a/test/date.test +++ b/test/date.test @@ -766,5 +766,7 @@ datetest 23.19 {datetime('2024-02-29 24:00:00')} {2024-03-01 00:00:00} datetest 23.20 {datetime('2025-02-28 24:00:00')} {2025-03-01 00:00:00} datetest 23.21 {datetime('2024-04-30 24:00:00')} {2024-05-01 00:00:00} datetest 23.22 {datetime('2024-12-31 24:00:00')} {2025-01-01 00:00:00} +# And Forum post 2026-10-17T12:57:32Z +datetest 23.23 {datetime('-0001-12-31 24:00:00')} {0000-01-01 00:00:00} finish_test