mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-08 06:53:45 +00:00
ICU-20654 Add hour/minute for "this hour/minute"
Fix expectation in cintltest add tests ICU-20654 Add hour/minute for "this hour/minute" See #674
This commit is contained in:
parent
5b4befd67c
commit
78f341ce7e
6 changed files with 53 additions and 14 deletions
|
@ -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) {
|
||||
|
|
|
@ -175,6 +175,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
|
||||
|
@ -182,7 +194,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;
|
||||
|
||||
|
|
|
@ -171,8 +171,8 @@ static const char* en_decDef_long_midSent_min[kNumOffsets*2] = {
|
|||
"2 minutes ago", "2 minutes ago", /* -2 */
|
||||
"1 minute ago", "1 minute ago", /* -1 */
|
||||
"0.7 minutes ago", "0.7 minutes ago", /* -0.7 */
|
||||
"0 minutes ago", "0 minutes ago", /* -0 */
|
||||
"in 0 minutes", "in 0 minutes", /* 0 */
|
||||
"this minute", "0 minutes ago", /* -0 */
|
||||
"this minute", "in 0 minutes", /* 0 */
|
||||
"in 0.7 minutes", "in 0.7 minutes", /* 0.7 */
|
||||
"in 1 minute", "in 1 minute", /* 1 */
|
||||
"in 2 minutes", "in 2 minutes", /* 2 */
|
||||
|
@ -186,8 +186,8 @@ static const FieldsDat en_attrDef_long_midSent_min[kNumOffsets*2] = {
|
|||
{UDAT_REL_NUMERIC_FIELD, 0, 1}, {UDAT_REL_NUMERIC_FIELD, 0, 1}, /* "2 minutes ago", "2 minutes ago", -2 */
|
||||
{UDAT_REL_NUMERIC_FIELD, 0, 1}, {UDAT_REL_NUMERIC_FIELD, 0, 1}, /* "1 minute ago", "1 minute ago", -1 */
|
||||
{UDAT_REL_NUMERIC_FIELD, 0, 3}, {UDAT_REL_NUMERIC_FIELD, 0, 3}, /* "0.7 minutes ago", "0.7 minutes ago", -0.7 */
|
||||
{UDAT_REL_NUMERIC_FIELD, 0, 1}, {UDAT_REL_NUMERIC_FIELD, 0, 1}, /* "0 minutes ago", "0 minutes ago", -0 */
|
||||
{UDAT_REL_NUMERIC_FIELD, 3, 4}, {UDAT_REL_NUMERIC_FIELD, 3, 4}, /* "in 0 minutes", "in 0 minutes", 0 */
|
||||
{-1, -1, -1}, {UDAT_REL_NUMERIC_FIELD, 0, 1}, /* "this minute", "0 minutes ago", -0 */
|
||||
{-1, -1, -1}, {UDAT_REL_NUMERIC_FIELD, 3, 4}, /* "this minute", "in 0 minutes", 0 */
|
||||
{UDAT_REL_NUMERIC_FIELD, 3, 6}, {UDAT_REL_NUMERIC_FIELD, 3, 6}, /* "in 0.7 minutes", "in 0.7 minutes", 0.7 */
|
||||
{UDAT_REL_NUMERIC_FIELD, 3, 4}, {UDAT_REL_NUMERIC_FIELD, 3, 4}, /* "in 1 minute", "in 1 minute", 1 */
|
||||
{UDAT_REL_NUMERIC_FIELD, 3, 4}, {UDAT_REL_NUMERIC_FIELD, 3, 4}, /* "in 2 minutes", "in 2 minutes", 2 */
|
||||
|
|
|
@ -286,6 +286,8 @@ static WithoutQuantityExpected kEnglishNoQuantity[] = {
|
|||
{UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_FRIDAY, "this Friday"},
|
||||
{UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_SATURDAY, "this Saturday"},
|
||||
{UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_SUNDAY, "this Sunday"},
|
||||
{UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_HOUR, "this hour"},
|
||||
{UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_MINUTE, "this minute"},
|
||||
|
||||
{UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_DAY, "day"},
|
||||
{UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_WEEK, "week"},
|
||||
|
@ -299,6 +301,8 @@ static WithoutQuantityExpected kEnglishNoQuantity[] = {
|
|||
{UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_FRIDAY, "Friday"},
|
||||
{UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_SATURDAY, "Saturday"},
|
||||
{UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_SUNDAY, "Sunday"},
|
||||
{UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_HOUR, "hour"},
|
||||
{UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_MINUTE, "minute"},
|
||||
|
||||
{UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_NOW, "now"}
|
||||
};
|
||||
|
@ -623,11 +627,11 @@ static WithQuantityExpectedRelativeDateTimeUnit kEnglishFormat[] = {
|
|||
{0.5, UDAT_REL_UNIT_SECOND, "in 0.5 seconds"},
|
||||
{1.0, UDAT_REL_UNIT_SECOND, "in 1 second"},
|
||||
{2.0, UDAT_REL_UNIT_SECOND, "in 2 seconds"},
|
||||
{0.0, UDAT_REL_UNIT_MINUTE, "in 0 minutes"},
|
||||
{0.0, UDAT_REL_UNIT_MINUTE, "this minute"},
|
||||
{0.5, UDAT_REL_UNIT_MINUTE, "in 0.5 minutes"},
|
||||
{1.0, UDAT_REL_UNIT_MINUTE, "in 1 minute"},
|
||||
{2.0, UDAT_REL_UNIT_MINUTE, "in 2 minutes"},
|
||||
{0.0, UDAT_REL_UNIT_HOUR, "in 0 hours"},
|
||||
{0.0, UDAT_REL_UNIT_HOUR, "this hour"},
|
||||
{0.5, UDAT_REL_UNIT_HOUR, "in 0.5 hours"},
|
||||
{1.0, UDAT_REL_UNIT_HOUR, "in 1 hour"},
|
||||
{2.0, UDAT_REL_UNIT_HOUR, "in 2 hours"},
|
||||
|
@ -684,11 +688,11 @@ static WithQuantityExpectedRelativeDateTimeUnit kEnglishFormat[] = {
|
|||
{-0.5, UDAT_REL_UNIT_SECOND, "0.5 seconds ago"},
|
||||
{-1.0, UDAT_REL_UNIT_SECOND, "1 second ago"},
|
||||
{-2.0, UDAT_REL_UNIT_SECOND, "2 seconds ago"},
|
||||
{-0.0, UDAT_REL_UNIT_MINUTE, "0 minutes ago"},
|
||||
{-0.0, UDAT_REL_UNIT_MINUTE, "this minute"},
|
||||
{-0.5, UDAT_REL_UNIT_MINUTE, "0.5 minutes ago"},
|
||||
{-1.0, UDAT_REL_UNIT_MINUTE, "1 minute ago"},
|
||||
{-2.0, UDAT_REL_UNIT_MINUTE, "2 minutes ago"},
|
||||
{-0.0, UDAT_REL_UNIT_HOUR, "0 hours ago"},
|
||||
{-0.0, UDAT_REL_UNIT_HOUR, "this hour"},
|
||||
{-0.5, UDAT_REL_UNIT_HOUR, "0.5 hours ago"},
|
||||
{-1.0, UDAT_REL_UNIT_HOUR, "1 hour ago"},
|
||||
{-2.0, UDAT_REL_UNIT_HOUR, "2 hours ago"},
|
||||
|
|
|
@ -252,6 +252,20 @@ public final class RelativeDateTimeFormatter {
|
|||
* @provisional This API might change or be removed in a future release.
|
||||
*/
|
||||
QUARTER,
|
||||
|
||||
/**
|
||||
* Hour
|
||||
* @draft ICU 65
|
||||
* @provisional This API might change or be removed in a future release.
|
||||
*/
|
||||
HOUR,
|
||||
|
||||
/**
|
||||
* Minute
|
||||
* @draft ICU 65
|
||||
* @provisional This API might change or be removed in a future release.
|
||||
*/
|
||||
MINUTE,
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -953,6 +967,8 @@ public final class RelativeDateTimeFormatter {
|
|||
case THURSDAY: absunit = AbsoluteUnit.THURSDAY; break;
|
||||
case FRIDAY: absunit = AbsoluteUnit.FRIDAY; break;
|
||||
case SATURDAY: absunit = AbsoluteUnit.SATURDAY; break;
|
||||
case HOUR: absunit = AbsoluteUnit.HOUR; break;
|
||||
case MINUTE: absunit = AbsoluteUnit.MINUTE; break;
|
||||
case SECOND:
|
||||
if (direction == Direction.THIS) {
|
||||
// absunit = AbsoluteUnit.NOW was set above
|
||||
|
@ -962,7 +978,6 @@ public final class RelativeDateTimeFormatter {
|
|||
// could just fall through here but that produces warnings
|
||||
useNumeric = true;
|
||||
break;
|
||||
case HOUR:
|
||||
default:
|
||||
useNumeric = true;
|
||||
break;
|
||||
|
@ -1203,8 +1218,8 @@ public final class RelativeDateTimeFormatter {
|
|||
// For white list of units to handle in RelativeDateTimeFormatter.
|
||||
private enum DateTimeUnit {
|
||||
SECOND(RelativeUnit.SECONDS, null),
|
||||
MINUTE(RelativeUnit.MINUTES, null),
|
||||
HOUR(RelativeUnit.HOURS, null),
|
||||
MINUTE(RelativeUnit.MINUTES, AbsoluteUnit.MINUTE),
|
||||
HOUR(RelativeUnit.HOURS, AbsoluteUnit.HOUR),
|
||||
DAY(RelativeUnit.DAYS, AbsoluteUnit.DAY),
|
||||
WEEK(RelativeUnit.WEEKS, AbsoluteUnit.WEEK),
|
||||
MONTH(RelativeUnit.MONTHS, AbsoluteUnit.MONTH),
|
||||
|
|
|
@ -405,6 +405,8 @@ public class RelativeDateTimeFormatterTest extends TestFmwk {
|
|||
{Direction.THIS, AbsoluteUnit.FRIDAY, "this Friday"},
|
||||
{Direction.THIS, AbsoluteUnit.SATURDAY, "this Saturday"},
|
||||
{Direction.THIS, AbsoluteUnit.SUNDAY, "this Sunday"},
|
||||
{Direction.THIS, AbsoluteUnit.HOUR, "this hour"},
|
||||
{Direction.THIS, AbsoluteUnit.MINUTE, "this minute"},
|
||||
|
||||
{Direction.PLAIN, AbsoluteUnit.DAY, "day"},
|
||||
{Direction.PLAIN, AbsoluteUnit.WEEK, "week"},
|
||||
|
@ -729,8 +731,8 @@ public class RelativeDateTimeFormatterTest extends TestFmwk {
|
|||
"2 minutes ago", "2 minutes ago", /* -2 */
|
||||
"1 minute ago", "1 minute ago", /* -1 */
|
||||
"0.7 minutes ago", "0.7 minutes ago", /* -0.7 */
|
||||
"0 minutes ago", "0 minutes ago", /* -0 */
|
||||
"in 0 minutes", "in 0 minutes", /* 0 */
|
||||
"this minute", "0 minutes ago", /* -0 */
|
||||
"this minute", "in 0 minutes", /* 0 */
|
||||
"in 0.7 minutes", "in 0.7 minutes", /* 0.7 */
|
||||
"in 1 minute", "in 1 minute", /* 1 */
|
||||
"in 2 minutes", "in 2 minutes", /* 2 */
|
||||
|
|
Loading…
Add table
Reference in a new issue