在代号一中格式化本地化日期

Format a localized date in Codename One

此问题不适用于通用 Java,仅适用于代号一。

我知道 L10NManager class 提供了方法 formatDateLongStyle, formatDateShortStyle, formatDateTime, formatDateTimeMedium, formatDateTimeShort,但它们的输出在不同平台(模拟器、Android、iOS 等)之间不一致。而且,即使他们的输出是一致的,也不是我所需要的。

我需要完全按照要求格式化输出的本地化字符串,即:短本地化星期几、星期几、长本地化月份、年份(四位数字)、带空格的减号(“-”) , 小时(24 小时,两位数),冒号(“:”),分钟。我不要秒,我需要完全按照这种格式输出。

Codename One 中有 API 吗?有什么提示吗?谢谢

SimpleDateFormat 通过使用以下字符串对资源包进行本地化来支持本地化:

private static final String L10N_ZONE_LONGNAME = "ZONE_LONGNAME_";
private static final String L10N_ZONE_SHORTNAME = "ZONE_SHORTNAME_";
private static final String L10N_ZONE_LONGNAME_DST = "ZONE_LONGNAME_DST_";
private static final String L10N_ZONE_SHORTNAME_DST = "ZONE_SHORTNAME_DST_";
private static final String L10N_WEEKDAY_LONGNAME = "WEEKDAY_LONGNAME_";
private static final String L10N_WEEKDAY_SHORTNAME = "WEEKDAY_SHORTNAME_";
private static final String L10N_MONTH_LONGNAME = "MONTH_LONGNAME_";
private static final String L10N_MONTH_SHORTNAME = "MONTH_SHORTNAME_";
private static final String L10N_AMPM = "AMPM_";
private static final String L10N_ERA = "ERA_";

因此,例如 AM/PM 可以通过分别定义 AMPM_AMAMPM_PM 来本地化。

您也可以直接使用 DateFormatSymbols,但这有点痛苦,因为您需要对每个 SimpleDateFormat 个实例执行此操作。

与代号 One SimpleDateFormat class 兼容的模式示例:https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

完整的实施示例,将按我要求格式化的日期本地化为意大利语。 请注意,在 weekDaysshortWeekDays 数组中本地化的第一天是星期日。

Form hi = new Form("Hi World", BoxLayout.y());

        String[] weekDays = {"Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"};
        String[] shortWeekDays = {"Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"};
        String[] months = {"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"};
        String[] shortMonths = {"Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"};
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
        simpleDateFormat.applyPattern("EEE d MMMMMMMMMMMMMMMMMMMM yyyy - HH:mm");
        simpleDateFormat.getDateFormatSymbols().setWeekdays(weekDays);
        simpleDateFormat.getDateFormatSymbols().setShortWeekdays(shortWeekDays);
        simpleDateFormat.getDateFormatSymbols().setMonths(months);
        simpleDateFormat.getDateFormatSymbols().setShortMonths(shortMonths);
        String date = simpleDateFormat.format(new Date(System.currentTimeMillis()));

        hi.add(new Label(date));
        hi.show();

输出示例:

Mer 11 Settembre 2019 - 11:51