diff --git a/manifest b/manifest index bac10e7cbd..1b3dde69ba 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Ensure\sthe\sinternal\sDBFLAG_SchemaKnownOk\sflag\sis\salways\scleared\safter\sa\sdatabase\sschema\sis\sreset.\sReport\s[bugs:/info/2026-10-14T01:25:35Z\s|\s2026-10-14T01:25:35Z]. -D 2026-10-14T13:39:28.937 +C Fixes\sto\sthe\shandling\sof\stime\s24:00:00.\n[forum:/info/2026-10-15T10:26:06Z|Forum\spost\s2026-10-15T10:26:06Z] +D 2026-10-15T13:19:18.320 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -749,7 +749,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 080641f59097d14fc7341f8bc0458d273b3a62d8381916db8ccbc89c2aae07b3 +F src/date.c 7719f64947e718a38897af459259eeac1aeda7daf7b87860c4d37fc687101004 F src/dbpage.c ec8590c5e7a564cef28ca3c6156521316a4d26cb572a34841b0bcb26b67b3f97 F src/dbstat.c 34d4e825fbf763640ce3dbc56910ab080495ef4a6efb48b2b1852a43d43763fc F src/delete.c 59eeca3fb88c29329afc41bb803ee568b120d9dd7470b5f38ab55cc38390b451 @@ -1105,7 +1105,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 d345d7905b6a212ced06efd6c236da0745f0f488e8d46df83940956b573adbc0 +F test/date.test e71d1c3640a6d1a59a8ea94b52dbe934ecaaeecd9e9db73ee1d10d27a5a6aece F test/date2.test 7e12ec14aaf4d5e6294b4ba140445b0eca06ea50062a9c3a69c4ee13d0b6f8b1 F test/date3.test a1b77abf05c6772fe5ca2337cac1398892f2a41e62bce7e6be0f4a08a0e64ae5 F test/date4.test b5ad22baf7394e008ac59383840159daedd45be31dcf74a3b2450ec0e28955ce @@ -2287,8 +2287,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P fc7b959f45a55d95c9cb37692e82b811e3ef286a6d826895dfee9a1f2abfdcc8 -R 3e0f9f85495f0b0cb6ba9c6c348ac543 -U dan -Z 6a44fc1abd844289e15d27bf9a9407c2 +P e6b9a40732900d0b7f83ec262ddc81bb47d4230de55d6db319689906e2bb3716 +R b8a73cb130d23c225b60c490bb456e7a +U drh +Z 2989edde742f2e190039e362d9cc3229 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 7c7dd88962..23493d6203 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e6b9a40732900d0b7f83ec262ddc81bb47d4230de55d6db319689906e2bb3716 +69071e25cad52b7fe15749f5fb969e847f9cd65e66341e8d1d4e5f5282283cd4 diff --git a/src/date.c b/src/date.c index 88ad5f32d0..339de09ac5 100644 --- a/src/date.c +++ b/src/date.c @@ -302,6 +302,21 @@ static void computeJD(DateTime *p){ } } +/* +** Return the number of dates in a specific month. +*/ +static int daysOfMonth(int Y, int M){ + if( (1<validYMD || p->isError ); - assert( p->D>=0 && p->D<=31 ); + assert( p->D>=0 && p->D<=32 ); assert( p->M>=0 && p->M<=12 ); - if( p->validHMS && p->h==24 ){ - p->h = 0; - p->D++; - } - if( p->D<=28 ){ - p->nFloor = 0; - }else if( (1<M) & 0x15aa ){ - p->nFloor = 0; - }else if( p->M!=2 ){ - p->nFloor = (p->D==31); - }else if( p->Y%4!=0 || (p->Y%100==0 && p->Y%400!=0) ){ - p->nFloor = p->D - 28; - }else{ - p->nFloor = p->D - 29; - } + mxD = daysOfMonth(p->Y, p->M); + p->nFloor = p->D>mxD ? p->D - mxD : 0; } /* @@ -356,7 +359,19 @@ static int parseYyyyMmDd(const char *zDate, DateTime *p){ zDate += 10; while( sqlite3Isspace(*zDate) || 'T'==*(u8*)zDate ){ zDate++; } if( parseHhMmSs(zDate, p)==0 ){ - /* We got the time */ + if( p->h==24 ){ + int mxD = daysOfMonth(Y,M); + p->h = 0; + D++; + if( D>mxD ){ + D -= mxD; + M++; + if( M>12 ){ + M = 1; + Y++; + } + } + } }else if( *zDate==0 ){ p->validHMS = 0; }else{ diff --git a/test/date.test b/test/date.test index ae26173b75..a5f2c6d460 100644 --- a/test/date.test +++ b/test/date.test @@ -760,6 +760,11 @@ datetest 23.13 {strftime('%d/%w/%U/%W','2000-01-01 24:00:00')} {02/0/01/00} datetest 23.14 {datetime('24:01')} {NULL} datetest 23.15 {datetime('24:00:01')} {NULL} datetest 23.16 {datetime('24:00:00.001')} {NULL} - +datetest 23.17 {datetime('2024-01-31 24:00:00')} {2024-02-01 00:00:00} +datetest 23.18 {datetime('2024-02-28 24:00:00')} {2024-02-29 00:00:00} +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} finish_test