在代号一中格式化本地化日期
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_AM
和 AMPM_PM
来本地化。
您也可以直接使用 DateFormatSymbols
,但这有点痛苦,因为您需要对每个 SimpleDateFormat
个实例执行此操作。
与代号 One SimpleDateFormat class 兼容的模式示例:https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
完整的实施示例,将按我要求格式化的日期本地化为意大利语。
请注意,在 weekDays
和 shortWeekDays
数组中本地化的第一天是星期日。
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
此问题不适用于通用 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_AM
和 AMPM_PM
来本地化。
您也可以直接使用 DateFormatSymbols
,但这有点痛苦,因为您需要对每个 SimpleDateFormat
个实例执行此操作。
与代号 One SimpleDateFormat class 兼容的模式示例:https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
完整的实施示例,将按我要求格式化的日期本地化为意大利语。
请注意,在 weekDays
和 shortWeekDays
数组中本地化的第一天是星期日。
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