1
0
mirror of https://github.com/sqlite/sqlite.git synced 2026-10-23 21:49:02 +03:00

In date/time functions, the hour can be 24 as long as the minutes and

seconds are zero.
[bugs:/info/2026-09-23T02:44:48Z|Bug 2026-09-23T02:44:48Z]

FossilOrigin-Name: 52eec02592f9d0d2d4282c20cc0872215c8d88e17f1a3e34d2ccab48119f7c42
This commit is contained in:
drh
2026-09-24 00:18:35 +00:00
parent 9da2d2374a
commit 4b495f91a9
4 changed files with 41 additions and 8 deletions

View File

@@ -1,5 +1,5 @@
C The\s--escape\smode\sfor\sCSV\sshould\sdefault\sto\s"off".\n[bugs:/info/2026-09-23T16:25:07Z|Bug\s2026-09-23T16:25:07Z]
D 2026-09-23T21:04:57.204
C In\sdate/time\sfunctions,\sthe\shour\scan\sbe\s24\sas\slong\sas\sthe\sminutes\sand\nseconds\sare\szero.\n[bugs:/info/2026-09-23T02:44:48Z|Bug\s2026-09-23T02:44:48Z]
D 2026-09-24T00:18:35.820
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -690,7 +690,7 @@ F src/build.c 0a160b40ea1f85b5a95e62310bbe2b944b8834a26c36f1f4b7f0f2c7e654f789
F src/callback.c 3605bbf02bd7ed46c79cd48346db4a32fc51d67624400539c0532f4eead804ad
F src/carray.c 22879bbd9e14fc4868f223b0d49bcdbbda4616c89f1519ec6a5e64b98a4137b1
F src/complete.c f216b970ce99c5a657556cf1f17e7ddd494515d3beb63df426bf59ff43bd3d9a
F src/date.c e1a002a4199bfa85e8778c0f72182c679580b131147d8e46d9221cfceffb8500
F src/date.c 080641f59097d14fc7341f8bc0458d273b3a62d8381916db8ccbc89c2aae07b3
F src/dbpage.c ec8590c5e7a564cef28ca3c6156521316a4d26cb572a34841b0bcb26b67b3f97
F src/dbstat.c 34d4e825fbf763640ce3dbc56910ab080495ef4a6efb48b2b1852a43d43763fc
F src/delete.c 59eeca3fb88c29329afc41bb803ee568b120d9dd7470b5f38ab55cc38390b451
@@ -1044,7 +1044,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 0c362a642cf3520a14eed6098faa454cd5def17c592c8dd4aa06894ca7e7ad5a
F test/date.test d345d7905b6a212ced06efd6c236da0745f0f488e8d46df83940956b573adbc0
F test/date2.test 7e12ec14aaf4d5e6294b4ba140445b0eca06ea50062a9c3a69c4ee13d0b6f8b1
F test/date3.test a1b77abf05c6772fe5ca2337cac1398892f2a41e62bce7e6be0f4a08a0e64ae5
F test/date4.test b5ad22baf7394e008ac59383840159daedd45be31dcf74a3b2450ec0e28955ce
@@ -2221,8 +2221,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
P c43287d8855b3f9a4621545793ecb2a89ef456d563d8377f2b243812e6acb2b3
R 7029d61507018935013d9bd86b4fbd55
P c356641fadf591bcf312ae9657ddc84e483a06aa068eb2d3021467435cbad0c1
R 61e15f4e74929517e6c8cccef1191cbb
U drh
Z 7edf157e70295c8c0c640953dad8dfc5
Z b5396b768045439e7de03274f9ac63de
# Remove this line to create a well-formed Fossil manifest.

View File

@@ -1 +1 @@
c356641fadf591bcf312ae9657ddc84e483a06aa068eb2d3021467435cbad0c1
52eec02592f9d0d2d4282c20cc0872215c8d88e17f1a3e34d2ccab48119f7c42

View File

@@ -233,6 +233,7 @@ static int parseHhMmSs(const char *zDate, DateTime *p){
}else{
s = 0;
}
if( h==24 && (m!=0 || s!=0 || ms!=0.0) ) return 1;
p->validJD = 0;
p->rawS = 0;
p->validHMS = 1;
@@ -269,6 +270,10 @@ static void computeJD(DateTime *p){
Y = 2000; /* If no YMD specified, assume 2000-Jan-01 */
M = 1;
D = 1;
if( p->validHMS && p->h==24 ){
p->h = 0;
D = 2;
}
}
if( Y<-4713 || Y>9999 || p->rawS ){
datetimeError(p);
@@ -307,6 +312,10 @@ static void computeFloor(DateTime *p){
assert( p->validYMD || p->isError );
assert( p->D>=0 && p->D<=31 );
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<<p->M) & 0x15aa ){

View File

@@ -736,6 +736,30 @@ datetest 22.6 {datetime('2026-02-17 12:34','end of year','subsec')} \
{2026-12-31 23:59:59.999}
datetest 22.7 {datetime('2026-02-17 12:34','end of time','subsec')} {NULL}
# Bug 2026-09-23T02:44:48Z
#
# Hour field can be 24 as long as minutes and seconds are zero.
#
datetest 23.1 {julianday('24:00:00')} {2451545.5}
datetest 23.2 {datetime('24:00:00')} {2000-01-02 00:00:00}
datetest 23.3 {julianday(datetime('24:00:00'))} {2451545.5}
datetest 23.4 {(julianday(datetime('24:00:00'))-julianday('24:00:00'))*24} 0.0
datetest 23.5 {datetime(datetime('24:00:00'))} {2000-01-02 00:00:00}
set A {2000-01-01 24:00:00}
set B {2000-01-02 00:00:00}
datetest 23.6 {timediff('$A','$B')} {+0000-00-00 00:00:00.000}
datetest 23.7 {datetime('$A')} {2000-01-02 00:00:00}
datetest 23.8 {datetime('$B',timediff('$A','$B'))} {2000-01-02 00:00:00}
set A {24:00:00}
set B {2000-01-01 00:00:00}
datetest 23.9 {timediff('$A','$B')} {+0000-00-01 00:00:00.000}
datetest 23.10 {datetime('$A')} {2000-01-02 00:00:00}
datetest 23.11 {datetime('$B',timediff('$A','$B'))} {2000-01-02 00:00:00}
datetest 23.12 {strftime('%d/%w/%U/%W','2000-01-02 00:00:00')} {02/0/01/00}
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}
finish_test