Fix "this hour" and "this minute" in RelativeTimeFormat
Upstream bug: https://unicode-org.atlassian.net/browse/ICU-20654
Upstream PR: https://github.com/unicode-org/icu/pull/674
Test: test/intl402/RelativeTimeFormat/prototype/format/en-us-numeric-auto.js
(changed by https://github.com/tc39/test262/pull/2191)
Bug: v8:9327
Change-Id: Ib80f7d1554594f25a625f31f6e7755ee48b9758c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/deps/icu/+/1670016
Reviewed-by: Jungshik Shin <jshin@chromium.org>
diff --git a/README.chromium b/README.chromium
index 5250aee..93dc468 100644
--- a/README.chromium
+++ b/README.chromium
@@ -272,3 +272,10 @@
https://unicode-org.atlassian.net/browse/ICU-20641
- upstream PR:
https://github.com/unicode-org/icu/pull/663
+
+11. Fix RelativeTimeFormat for "this hour" and "this minute"
+ - patches/this_hour_minute.patch
+ - upstream bug:
+ https://unicode-org.atlassian.net/browse/ICU-20654
+ - upstream PR:
+ https://github.com/unicode-org/icu/pull/674
diff --git a/patches/this_hour_minute.patch b/patches/this_hour_minute.patch
new file mode 100644
index 0000000..6c17e26
--- /dev/null
+++ b/patches/this_hour_minute.patch
@@ -0,0 +1,56 @@
+diff --git a/source/i18n/reldatefmt.cpp b/source/i18n/reldatefmt.cpp
+index a7520d31..15d5e99c 100644
+--- a/source/i18n/reldatefmt.cpp
++++ b/source/i18n/reldatefmt.cpp
+@@ -315,6 +315,10 @@ struct RelDateTimeFmtDataSink : public ResourceSink {
+ return UDAT_ABSOLUTE_FRIDAY;
+ case SATURDAY:
+ return UDAT_ABSOLUTE_SATURDAY;
++ case HOUR:
++ return UDAT_ABSOLUTE_HOUR;
++ case MINUTE:
++ return UDAT_ABSOLUTE_MINUTE;
+ default:
+ return -1;
+ }
+@@ -1157,6 +1161,8 @@ void RelativeDateTimeFormatter::formatRelativeImpl(
+ case UDAT_REL_UNIT_THURSDAY: absunit = UDAT_ABSOLUTE_THURSDAY; break;
+ case UDAT_REL_UNIT_FRIDAY: absunit = UDAT_ABSOLUTE_FRIDAY; break;
+ case UDAT_REL_UNIT_SATURDAY: absunit = UDAT_ABSOLUTE_SATURDAY; break;
++ case UDAT_REL_UNIT_HOUR: absunit = UDAT_ABSOLUTE_HOUR; break;
++ case UDAT_REL_UNIT_MINUTE: absunit = UDAT_ABSOLUTE_MINUTE; break;
+ default: break;
+ }
+ if (direction != UDAT_DIRECTION_COUNT && absunit != UDAT_ABSOLUTE_UNIT_COUNT) {
+diff --git a/source/i18n/unicode/reldatefmt.h b/source/i18n/unicode/reldatefmt.h
+index 16ae91ad..1533ac6c 100644
+--- a/source/i18n/unicode/reldatefmt.h
++++ b/source/i18n/unicode/reldatefmt.h
+@@ -172,6 +172,18 @@ typedef enum UDateAbsoluteUnit {
+ * @draft ICU 63
+ */
+ UDAT_ABSOLUTE_QUARTER,
++
++ /**
++ * Hour
++ * @draft ICU 65
++ */
++ UDAT_ABSOLUTE_HOUR,
++
++ /**
++ * Minute
++ * @draft ICU 65
++ */
++ UDAT_ABSOLUTE_MINUTE,
+ #endif // U_HIDE_DRAFT_API
+
+ #ifndef U_HIDE_DEPRECATED_API
+@@ -179,7 +191,7 @@ typedef enum UDateAbsoluteUnit {
+ * One more than the highest normal UDateAbsoluteUnit value.
+ * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
+ */
+- UDAT_ABSOLUTE_UNIT_COUNT = UDAT_ABSOLUTE_NOW + 2
++ UDAT_ABSOLUTE_UNIT_COUNT = UDAT_ABSOLUTE_NOW + 4
+ #endif // U_HIDE_DEPRECATED_API
+ } UDateAbsoluteUnit;
+
diff --git a/source/i18n/reldatefmt.cpp b/source/i18n/reldatefmt.cpp
index a7520d3..15d5e99 100644
--- a/source/i18n/reldatefmt.cpp
+++ b/source/i18n/reldatefmt.cpp
@@ -315,6 +315,10 @@
return UDAT_ABSOLUTE_FRIDAY;
case SATURDAY:
return UDAT_ABSOLUTE_SATURDAY;
+ case HOUR:
+ return UDAT_ABSOLUTE_HOUR;
+ case MINUTE:
+ return UDAT_ABSOLUTE_MINUTE;
default:
return -1;
}
@@ -1157,6 +1161,8 @@
case UDAT_REL_UNIT_THURSDAY: absunit = UDAT_ABSOLUTE_THURSDAY; break;
case UDAT_REL_UNIT_FRIDAY: absunit = UDAT_ABSOLUTE_FRIDAY; break;
case UDAT_REL_UNIT_SATURDAY: absunit = UDAT_ABSOLUTE_SATURDAY; break;
+ case UDAT_REL_UNIT_HOUR: absunit = UDAT_ABSOLUTE_HOUR; break;
+ case UDAT_REL_UNIT_MINUTE: absunit = UDAT_ABSOLUTE_MINUTE; break;
default: break;
}
if (direction != UDAT_DIRECTION_COUNT && absunit != UDAT_ABSOLUTE_UNIT_COUNT) {
diff --git a/source/i18n/unicode/reldatefmt.h b/source/i18n/unicode/reldatefmt.h
index 16ae91a..1533ac6 100644
--- a/source/i18n/unicode/reldatefmt.h
+++ b/source/i18n/unicode/reldatefmt.h
@@ -172,6 +172,18 @@
* @draft ICU 63
*/
UDAT_ABSOLUTE_QUARTER,
+
+ /**
+ * Hour
+ * @draft ICU 65
+ */
+ UDAT_ABSOLUTE_HOUR,
+
+ /**
+ * Minute
+ * @draft ICU 65
+ */
+ UDAT_ABSOLUTE_MINUTE,
#endif // U_HIDE_DRAFT_API
#ifndef U_HIDE_DEPRECATED_API
@@ -179,7 +191,7 @@
* One more than the highest normal UDateAbsoluteUnit value.
* @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
*/
- UDAT_ABSOLUTE_UNIT_COUNT = UDAT_ABSOLUTE_NOW + 2
+ UDAT_ABSOLUTE_UNIT_COUNT = UDAT_ABSOLUTE_NOW + 4
#endif // U_HIDE_DEPRECATED_API
} UDateAbsoluteUnit;