提交 ea907544 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Write negative ISO week years in the same way as Oracle

上级 4dcac67f
...@@ -789,25 +789,25 @@ public class ToChar { ...@@ -789,25 +789,25 @@ public class ToChar {
StringUtils.appendZeroPadded(output, 4, posYear); StringUtils.appendZeroPadded(output, 4, posYear);
i += 4; i += 4;
} else if ((cap = containsAt(format, i, "IYYY")) != null) { } else if ((cap = containsAt(format, i, "IYYY")) != null) {
StringUtils.appendZeroPadded(output, 4, DateTimeUtils.getIsoWeekYear(dateValue)); StringUtils.appendZeroPadded(output, 4, Math.abs(DateTimeUtils.getIsoWeekYear(dateValue)));
i += 4; i += 4;
} else if ((cap = containsAt(format, i, "YYY")) != null) { } else if ((cap = containsAt(format, i, "YYY")) != null) {
StringUtils.appendZeroPadded(output, 3, posYear % 1000); StringUtils.appendZeroPadded(output, 3, posYear % 1000);
i += 3; i += 3;
} else if ((cap = containsAt(format, i, "IYY")) != null) { } else if ((cap = containsAt(format, i, "IYY")) != null) {
StringUtils.appendZeroPadded(output, 3, DateTimeUtils.getIsoWeekYear(dateValue) % 1000); StringUtils.appendZeroPadded(output, 3, Math.abs(DateTimeUtils.getIsoWeekYear(dateValue)) % 1000);
i += 3; i += 3;
} else if ((cap = containsAt(format, i, "YY", "RR")) != null) { } else if ((cap = containsAt(format, i, "YY", "RR")) != null) {
StringUtils.appendZeroPadded(output, 2, posYear % 100); StringUtils.appendZeroPadded(output, 2, posYear % 100);
i += 2; i += 2;
} else if ((cap = containsAt(format, i, "IY")) != null) { } else if ((cap = containsAt(format, i, "IY")) != null) {
StringUtils.appendZeroPadded(output, 2, DateTimeUtils.getIsoWeekYear(dateValue) % 100); StringUtils.appendZeroPadded(output, 2, Math.abs(DateTimeUtils.getIsoWeekYear(dateValue)) % 100);
i += 2; i += 2;
} else if ((cap = containsAt(format, i, "Y")) != null) { } else if ((cap = containsAt(format, i, "Y")) != null) {
output.append(posYear % 10); output.append(posYear % 10);
i += 1; i += 1;
} else if ((cap = containsAt(format, i, "I")) != null) { } else if ((cap = containsAt(format, i, "I")) != null) {
output.append(DateTimeUtils.getIsoWeekYear(dateValue) % 10); output.append(Math.abs(DateTimeUtils.getIsoWeekYear(dateValue)) % 10);
i += 1; i += 1;
// Month / quarter // Month / quarter
......
...@@ -1495,6 +1495,8 @@ public class TestFunctions extends TestBase implements AggregateFunction { ...@@ -1495,6 +1495,8 @@ public class TestFunctions extends TestBase implements AggregateFunction {
assertResult("014", stat, "SELECT TO_CHAR(DATE '2013-12-30', 'IYY') FROM DUAL"); assertResult("014", stat, "SELECT TO_CHAR(DATE '2013-12-30', 'IYY') FROM DUAL");
assertResult("14", stat, "SELECT TO_CHAR(DATE '2013-12-30', 'IY') FROM DUAL"); assertResult("14", stat, "SELECT TO_CHAR(DATE '2013-12-30', 'IY') FROM DUAL");
assertResult("4", stat, "SELECT TO_CHAR(DATE '2013-12-30', 'I') FROM DUAL"); assertResult("4", stat, "SELECT TO_CHAR(DATE '2013-12-30', 'I') FROM DUAL");
assertResult("0001", stat, "SELECT TO_CHAR(DATE '-0001-01-01', 'IYYY') FROM DUAL");
assertResult("0005", stat, "SELECT TO_CHAR(DATE '-0004-01-01', 'IYYY') FROM DUAL");
assertResult("08:12 AM", stat, "SELECT TO_CHAR(X, 'HH:MI AM') FROM T"); assertResult("08:12 AM", stat, "SELECT TO_CHAR(X, 'HH:MI AM') FROM T");
assertResult("08:12 A.M.", stat, "SELECT TO_CHAR(X, 'HH:MI A.M.') FROM T"); assertResult("08:12 A.M.", stat, "SELECT TO_CHAR(X, 'HH:MI A.M.') FROM T");
assertResult("02:04 P.M.", stat, "SELECT TO_CHAR(X, 'HH:MI A.M.') FROM U"); assertResult("02:04 P.M.", stat, "SELECT TO_CHAR(X, 'HH:MI A.M.') FROM U");
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论