Fossil SCM
Fix the fossil_roundup_date() function so that it also rounds up dates with milliseconds at the end.
Commit
5298941066616b332e234a2ae733aa27caaf2e50bd57d2a563800bb589c186b2
Parent
349e9f2ff3d1ba3…
1 file changed
+24
-3
+24
-3
| --- src/name.c | ||
| +++ src/name.c | ||
| @@ -182,23 +182,44 @@ | ||
| 182 | 182 | int addZ = 0; |
| 183 | 183 | if( n>10 && (zDate[n-1]=='z' || zDate[n-1]=='Z') ){ |
| 184 | 184 | n--; |
| 185 | 185 | addZ = 1; |
| 186 | 186 | } |
| 187 | - if( n==19 ){ /* YYYY-MM-DD HH:MM:SS */ | |
| 187 | + if( n>=21 && n<=23 ){ /* YYYY-MM-DD HH:MM:SS.SSS */ | |
| 188 | + memcpy(zUp, zDate, n); | |
| 189 | + while( n<23 ) zUp[n++] = '9'; | |
| 190 | + /* If milliseconds is less than 999, round up to the next millisecond */ | |
| 191 | + if( strcmp(&zUp[20],"999")<0 ){ | |
| 192 | + if( zUp[22]<='9' ){ | |
| 193 | + zUp[22]++; | |
| 194 | + }else{ | |
| 195 | + zUp[22] = 0; | |
| 196 | + if( zUp[21]<'9' ){ | |
| 197 | + zUp[21]++; | |
| 198 | + }else{ | |
| 199 | + zUp[21] = 0; | |
| 200 | + zUp[20]++; | |
| 201 | + } | |
| 202 | + } | |
| 203 | + } | |
| 204 | + if( addZ ) zUp[n++] = 'z'; | |
| 205 | + zUp[n] = 0; | |
| 206 | + return zUp; | |
| 207 | + } | |
| 208 | + if( n==19 ){ /* YYYY-MM-DD HH:MM:SS */ | |
| 188 | 209 | memcpy(zUp, zDate, 19); |
| 189 | 210 | memcpy(zUp+19, ".999z", 6); |
| 190 | 211 | if( !addZ ) zUp[23] = 0; |
| 191 | 212 | return zUp; |
| 192 | 213 | } |
| 193 | - if( n==16 ){ /* YYYY-MM-DD HH:MM */ | |
| 214 | + if( n==16 ){ /* YYYY-MM-DD HH:MM */ | |
| 194 | 215 | memcpy(zUp, zDate, 16); |
| 195 | 216 | memcpy(zUp+16, ":59.999z", 8); |
| 196 | 217 | if( !addZ ) zUp[23] = 0; |
| 197 | 218 | return zUp; |
| 198 | 219 | } |
| 199 | - if( n==10 ){ /* YYYY-MM-DD */ | |
| 220 | + if( n==10 ){ /* YYYY-MM-DD */ | |
| 200 | 221 | memcpy(zUp, zDate, 10); |
| 201 | 222 | memcpy(zUp+10, " 23:59:59.999z", 14); |
| 202 | 223 | if( !addZ ) zUp[23] = 0; |
| 203 | 224 | return zUp; |
| 204 | 225 | } |
| 205 | 226 |
| --- src/name.c | |
| +++ src/name.c | |
| @@ -182,23 +182,44 @@ | |
| 182 | int addZ = 0; |
| 183 | if( n>10 && (zDate[n-1]=='z' || zDate[n-1]=='Z') ){ |
| 184 | n--; |
| 185 | addZ = 1; |
| 186 | } |
| 187 | if( n==19 ){ /* YYYY-MM-DD HH:MM:SS */ |
| 188 | memcpy(zUp, zDate, 19); |
| 189 | memcpy(zUp+19, ".999z", 6); |
| 190 | if( !addZ ) zUp[23] = 0; |
| 191 | return zUp; |
| 192 | } |
| 193 | if( n==16 ){ /* YYYY-MM-DD HH:MM */ |
| 194 | memcpy(zUp, zDate, 16); |
| 195 | memcpy(zUp+16, ":59.999z", 8); |
| 196 | if( !addZ ) zUp[23] = 0; |
| 197 | return zUp; |
| 198 | } |
| 199 | if( n==10 ){ /* YYYY-MM-DD */ |
| 200 | memcpy(zUp, zDate, 10); |
| 201 | memcpy(zUp+10, " 23:59:59.999z", 14); |
| 202 | if( !addZ ) zUp[23] = 0; |
| 203 | return zUp; |
| 204 | } |
| 205 |
| --- src/name.c | |
| +++ src/name.c | |
| @@ -182,23 +182,44 @@ | |
| 182 | int addZ = 0; |
| 183 | if( n>10 && (zDate[n-1]=='z' || zDate[n-1]=='Z') ){ |
| 184 | n--; |
| 185 | addZ = 1; |
| 186 | } |
| 187 | if( n>=21 && n<=23 ){ /* YYYY-MM-DD HH:MM:SS.SSS */ |
| 188 | memcpy(zUp, zDate, n); |
| 189 | while( n<23 ) zUp[n++] = '9'; |
| 190 | /* If milliseconds is less than 999, round up to the next millisecond */ |
| 191 | if( strcmp(&zUp[20],"999")<0 ){ |
| 192 | if( zUp[22]<='9' ){ |
| 193 | zUp[22]++; |
| 194 | }else{ |
| 195 | zUp[22] = 0; |
| 196 | if( zUp[21]<'9' ){ |
| 197 | zUp[21]++; |
| 198 | }else{ |
| 199 | zUp[21] = 0; |
| 200 | zUp[20]++; |
| 201 | } |
| 202 | } |
| 203 | } |
| 204 | if( addZ ) zUp[n++] = 'z'; |
| 205 | zUp[n] = 0; |
| 206 | return zUp; |
| 207 | } |
| 208 | if( n==19 ){ /* YYYY-MM-DD HH:MM:SS */ |
| 209 | memcpy(zUp, zDate, 19); |
| 210 | memcpy(zUp+19, ".999z", 6); |
| 211 | if( !addZ ) zUp[23] = 0; |
| 212 | return zUp; |
| 213 | } |
| 214 | if( n==16 ){ /* YYYY-MM-DD HH:MM */ |
| 215 | memcpy(zUp, zDate, 16); |
| 216 | memcpy(zUp+16, ":59.999z", 8); |
| 217 | if( !addZ ) zUp[23] = 0; |
| 218 | return zUp; |
| 219 | } |
| 220 | if( n==10 ){ /* YYYY-MM-DD */ |
| 221 | memcpy(zUp, zDate, 10); |
| 222 | memcpy(zUp+10, " 23:59:59.999z", 14); |
| 223 | if( !addZ ) zUp[23] = 0; |
| 224 | return zUp; |
| 225 | } |
| 226 |