增加日期模板

Signed-off-by: LY <liuyong235@huawei.com>
This commit is contained in:
LY
2025-12-02 12:16:38 +08:00
parent 3e52e35e19
commit d1b168c193
4 changed files with 1441 additions and 305 deletions
Binary file not shown.
+39 -73
View File
@@ -17,6 +17,7 @@
#define GLOBAL_I18N_PATTERN_H
#include <string>
#include <unordered_map>
#include "date_time_data.h"
#include "str_util.h"
@@ -35,6 +36,11 @@
#define WEEK_DAY_INDEX 0x00010008
#define NUMBER_MONTH_ABBR_WEEK_DAY_INDEX 0x00010009
#define NUMBER_MONTH_DAY_INDEX 0x0001000A
#define YEAR_ABBR_MONTH_INDEX 0x0001000B
#define YEAR_WIDE_MONTH_WIDE_WEEKDAY_DAY_INDEX 0x0001000C
#define WIDE_MONTH_WIDE_WEEKDAY_DAY_INDEX 0x0001000D
#define ABBR_MONTH_INDEX 0x0001000E
#define WIDE_WEEKDAY_INDEX 0x0001000F
#define HOUR12_MINUTE_SECOND_INDEX 0x00020000
#define HOUR24_MINUTE_SECOND_INDEX 0x00020001
#define HOUR_MINUTE_SECOND_INDEX 0x00020002
@@ -59,6 +65,34 @@ enum PatternType {
PATTERN_TYPE_END,
};
static const std::unordered_map<AvailableDateTimeFormatPattern, uint32_t> PATTERN_TO_INDEX = {
{ HOUR12_MINUTE_SECOND, HOUR12_MINUTE_SECOND_INDEX },
{ HOUR24_MINUTE_SECOND, HOUR24_MINUTE_SECOND_INDEX },
{ HOUR_MINUTE_SECOND, HOUR_MINUTE_SECOND_INDEX },
{ ABBR_MONTH_DAY, ABBR_MONTH_DAY_INDEX },
{ HOUR12_MINUTE, HOUR12_MINUTE_INDEX },
{ HOUR24_MINUTE, HOUR24_MINUTE_INDEX },
{ HOUR_MINUTE, HOUR_MINUTE_INDEX },
{ ABBR_MONTH_WEEKDAY_DAY, ABBR_MONTH_WEEKDAY_DAY_INDEX },
{ FULL, FULL_INDEX },
{ MEDIUM, MEDIUM_INDEX },
{ SHORT, SHORT_INDEX },
{ YEAR_ABBR_MONTH_ABBR_WEEKDAY_DAY, YEAR_ABBR_MONTH_ABBR_WEEKDAY_DAY_INDEX },
{ YEAR_WIDE_MONTH_ABBR_WEEKDAY_DAY, YEAR_WIDE_MONTH_ABBR_WEEKDAY_DAY_INDEX },
{ YEAR_SHORT_MONTH_WIDE_WEEKDAY_DAY, YEAR_SHORT_MONTH_WIDE_WEEKDAY_DAY_INDEX },
{ YEAR_SHORT_MONTH_ABBR_WEEKDAY_DAY, YEAR_SHORT_MONTH_ABBR_WEEKDAY_DAY_INDEX },
{ YEAR_ABBR_MONTH_WIDE_WEEKDAY_DAY, YEAR_ABBR_MONTH_WIDE_WEEKDAY_DAY_INDEX },
{ YEAR_WIDE_MONTH_DAY, YEAR_WIDE_MONTH_DAY_INDEX },
{ WEEK_DAY, WEEK_DAY_INDEX },
{ NUMBER_MONTH_ABBR_WEEK_DAY, NUMBER_MONTH_ABBR_WEEK_DAY_INDEX },
{ NUMBER_MONTH_DAY, NUMBER_MONTH_DAY_INDEX },
{ YEAR_ABBR_MONTH, YEAR_ABBR_MONTH_INDEX },
{ YEAR_WIDE_MONTH_WIDE_WEEKDAY_DAY, YEAR_WIDE_MONTH_WIDE_WEEKDAY_DAY_INDEX },
{ WIDE_MONTH_WIDE_WEEKDAY_DAY, WIDE_MONTH_WIDE_WEEKDAY_DAY_INDEX },
{ ABBR_MONTH, ABBR_MONTH_INDEX },
{ WIDE_WEEKDAY, WIDE_WEEKDAY_INDEX }
};
std::string GetPatternFromIndex(uint32_t index, const DateTimeData * const data)
{
uint32_t type = index >> PATTERN_TYPE_SHIFT;
@@ -86,85 +120,17 @@ std::string GetPatternFromIndex(uint32_t index, const DateTimeData * const data)
}
}
std::string GetStringFromPattern2(const AvailableDateTimeFormatPattern &requestPattern, const DateTimeData * const data)
{
switch (requestPattern) {
case ABBR_MONTH_WEEKDAY_DAY: {
return GetPatternFromIndex(ABBR_MONTH_WEEKDAY_DAY_INDEX, data);
}
case FULL: {
return GetPatternFromIndex(FULL_INDEX, data);
}
case MEDIUM: {
return GetPatternFromIndex(MEDIUM_INDEX, data);
}
case SHORT: {
return GetPatternFromIndex(SHORT_INDEX, data);
}
case YEAR_ABBR_MONTH_ABBR_WEEKDAY_DAY: {
return GetPatternFromIndex(YEAR_ABBR_MONTH_ABBR_WEEKDAY_DAY_INDEX, data);
}
case YEAR_WIDE_MONTH_ABBR_WEEKDAY_DAY: {
return GetPatternFromIndex(YEAR_WIDE_MONTH_ABBR_WEEKDAY_DAY_INDEX, data);
}
case YEAR_SHORT_MONTH_WIDE_WEEKDAY_DAY: {
return GetPatternFromIndex(YEAR_SHORT_MONTH_WIDE_WEEKDAY_DAY_INDEX, data);
}
case YEAR_SHORT_MONTH_ABBR_WEEKDAY_DAY: {
return GetPatternFromIndex(YEAR_SHORT_MONTH_ABBR_WEEKDAY_DAY_INDEX, data);
}
case YEAR_ABBR_MONTH_WIDE_WEEKDAY_DAY: {
return GetPatternFromIndex(YEAR_ABBR_MONTH_WIDE_WEEKDAY_DAY_INDEX, data);
}
case YEAR_WIDE_MONTH_DAY: {
return GetPatternFromIndex(YEAR_WIDE_MONTH_DAY_INDEX, data);
}
case WEEK_DAY: {
return GetPatternFromIndex(WEEK_DAY_INDEX, data);
}
case NUMBER_MONTH_ABBR_WEEK_DAY: {
return GetPatternFromIndex(NUMBER_MONTH_ABBR_WEEK_DAY_INDEX, data);
}
case NUMBER_MONTH_DAY: {
return GetPatternFromIndex(NUMBER_MONTH_DAY_INDEX, data);
}
default: {
return "";
}
}
}
std::string GetStringFromPattern(const AvailableDateTimeFormatPattern &requestPattern, const DateTimeData * const data)
{
if (data == nullptr) {
return "";
}
switch (requestPattern) {
case HOUR12_MINUTE_SECOND: {
return GetPatternFromIndex(HOUR12_MINUTE_SECOND_INDEX, data);
}
case HOUR24_MINUTE_SECOND: {
return GetPatternFromIndex(HOUR24_MINUTE_SECOND_INDEX, data);
}
case HOUR_MINUTE_SECOND: {
return GetPatternFromIndex(HOUR_MINUTE_SECOND_INDEX, data);
}
case ABBR_MONTH_DAY: {
return GetPatternFromIndex(ABBR_MONTH_DAY_INDEX, data);
}
case HOUR12_MINUTE: {
return GetPatternFromIndex(HOUR12_MINUTE_INDEX, data);
}
case HOUR24_MINUTE: {
return GetPatternFromIndex(HOUR24_MINUTE_INDEX, data);
}
case HOUR_MINUTE: {
return GetPatternFromIndex(HOUR_MINUTE_INDEX, data);
}
default: {
return GetStringFromPattern2(requestPattern, data);
}
auto iter = PATTERN_TO_INDEX.find(requestPattern);
if (iter == PATTERN_TO_INDEX.end()) {
return "";
}
return GetPatternFromIndex(iter->second, data);
}
std::string GetStringFromElapsedPattern(const ElapsedPatternType &type, const DateTimeData * const data)
+16 -1
View File
@@ -135,7 +135,22 @@ enum AvailableDateTimeFormatPattern {
NUMBER_MONTH_ABBR_WEEK_DAY,
/* Display numeric month-day */
NUMBER_MONTH_DAY
NUMBER_MONTH_DAY,
/* Display year, month (abbreviated) */
YEAR_ABBR_MONTH,
/* Display year, month (wide), day of the week (wide), and day. */
YEAR_WIDE_MONTH_WIDE_WEEKDAY_DAY,
/* Display month (wide), day of the week (wide), and day. */
WIDE_MONTH_WIDE_WEEKDAY_DAY,
/* Display month (abbreviated) */
ABBR_MONTH,
/* Display day of the week (wide) */
WIDE_WEEKDAY
};
enum ElapsedPatternType {
File diff suppressed because it is too large Load Diff