diff options
Diffstat (limited to 'src/backend/utils/adt/formatting.c')
-rw-r--r-- | src/backend/utils/adt/formatting.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c index 25af8a212b8..2aa6df1756b 100644 --- a/src/backend/utils/adt/formatting.c +++ b/src/backend/utils/adt/formatting.c @@ -412,7 +412,7 @@ typedef struct mi, ss, ssss, - d, + d, /* stored as 1-7, Sunday = 1, 0 means missing */ dd, ddd, mm, @@ -2897,6 +2897,7 @@ DCH_from_char(FormatNode *node, char *in, TmFromChar *out) from_char_seq_search(&value, &s, days, ONE_UPPER, MAX_DAY_LEN, n); from_char_set_int(&out->d, value, n); + out->d++; break; case DCH_DY: case DCH_Dy: @@ -2904,6 +2905,7 @@ DCH_from_char(FormatNode *node, char *in, TmFromChar *out) from_char_seq_search(&value, &s, days, ONE_UPPER, MAX_DY_LEN, n); from_char_set_int(&out->d, value, n); + out->d++; break; case DCH_DDD: from_char_parse_int(&out->ddd, &s, n); @@ -2919,11 +2921,13 @@ DCH_from_char(FormatNode *node, char *in, TmFromChar *out) break; case DCH_D: from_char_parse_int(&out->d, &s, n); - out->d--; s += SKIP_THth(n->suffix); break; case DCH_ID: from_char_parse_int_len(&out->d, &s, 1, n); + /* Shift numbering to match Gregorian where Sunday = 1 */ + if (++out->d > 7) + out->d = 1; s += SKIP_THth(n->suffix); break; case DCH_WW: @@ -3534,7 +3538,7 @@ do_to_timestamp(text *date_txt, text *fmt, if (tmfc.w) tmfc.dd = (tmfc.w - 1) * 7 + 1; if (tmfc.d) - tm->tm_wday = tmfc.d; + tm->tm_wday = tmfc.d - 1; /* convert to native numbering */ if (tmfc.dd) tm->tm_mday = tmfc.dd; if (tmfc.ddd) |