The test cases added by commit
26ae3aa80 exposed an old oversight in
timestamp[tz]_part: they didn't correct the result of date2isoyear()
for BC years, so that we produced an off-by-one answer for such years.
Fix that, and back-patch to all supported branches.
Discussion: https://postgr.es/m/SG2PR06MB37762CAE45DB0F6CA7001EA9B6550@SG2PR06MB3776.apcprd06.prod.outlook.com
index edeaee4cb1c74a2e116084bc3546e64fb46f9092..945b8f85ddb083c2f5ee1ef28bae9fc9f1900998 100644 (file)
/* date2isoyear()
*
* Returns ISO 8601 year number.
+ * Note: zero or negative results follow the year-zero-exists convention.
*/
int
date2isoyear(int year, int mon, int mday)
case DTK_ISOYEAR:
result = date2isoyear(tm->tm_year, tm->tm_mon, tm->tm_mday);
+ /* Adjust BC years */
+ if (result <= 0)
+ result -= 1;
break;
case DTK_DOW:
case DTK_ISOYEAR:
result = date2isoyear(tm->tm_year, tm->tm_mon, tm->tm_mday);
+ /* Adjust BC years */
+ if (result <= 0)
+ result -= 1;
break;
case DTK_DOW:
index 29af49ad898f9aba66d26a4ae77cae8eb7c1c12a..39a4d4928084402e733a771d759c8ffec72514fa 100644 (file)
Fri Feb 14 17:32:01 1997 | 1997 | 7 | 5 | 5 | 45
Sat Feb 15 17:32:01 1997 | 1997 | 7 | 6 | 6 | 46
Sun Feb 16 17:32:01 1997 | 1997 | 7 | 7 | 0 | 47
- Tue Feb 16 17:32:01 0097 BC | -96 | 7 | 2 | 2 | 47
+ Tue Feb 16 17:32:01 0097 BC | -97 | 7 | 2 | 2 | 47
Sat Feb 16 17:32:01 0097 | 97 | 7 | 6 | 6 | 47
Thu Feb 16 17:32:01 0597 | 597 | 7 | 4 | 4 | 47
Tue Feb 16 17:32:01 1097 | 1097 | 7 | 2 | 2 | 47
index 72b2cdd6b7e9edf9e1203600060273db1bec167e..bb89910a451b36572b5d7847ca1151cd09141c39 100644 (file)
Fri Feb 14 17:32:01 1997 PST | 1997 | 7 | 5 | 5 | 45
Sat Feb 15 17:32:01 1997 PST | 1997 | 7 | 6 | 6 | 46
Sun Feb 16 17:32:01 1997 PST | 1997 | 7 | 7 | 0 | 47
- Tue Feb 16 17:32:01 0097 PST BC | -96 | 7 | 2 | 2 | 47
+ Tue Feb 16 17:32:01 0097 PST BC | -97 | 7 | 2 | 2 | 47
Sat Feb 16 17:32:01 0097 PST | 97 | 7 | 6 | 6 | 47
Thu Feb 16 17:32:01 0597 PST | 597 | 7 | 4 | 4 | 47
Tue Feb 16 17:32:01 1097 PST | 1097 | 7 | 2 | 2 | 47