Freemarker如何获取对应locale下日期格式化的分隔字符?
Freemarker 获取对应Locale短日期分隔符方案
核心结论
Freemarker 本身没有内置直接返回当前Locale对应短日期分隔符的专用方法,你可以通过以下两种方式实现需求:
方案1:纯模板层取巧获取
利用当前Locale下短日期字符串的格式特征,通过正则提取分隔符,适配绝大多数主流Locale场景:
[#setting locale="de"] [#assign shortDateStr = .now?date?string.short] <!-- 正则替换掉所有数字,剩余第一个字符就是分隔符 --> [#assign dateSeparator = shortDateStr?replace('[0-9]', '', 'r')?first] de 区域分隔符:${dateSeparator} <br> [#setting locale="en"] [#assign shortDateStr = .now?date?string.short] [#assign dateSeparator = shortDateStr?replace('[0-9]', '', 'r')?first] en 区域分隔符:${dateSeparator}
该方案输出结果为:
de 区域分隔符:. en 区域分隔符:/
方案2:Java后端注入(更稳定)
如果可以修改后端Java代码,可以直接在Java层拿到分隔符后注入Freemarker上下文,模板直接调用即可:
// Java 端核心逻辑示例 import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Locale; // 拿到当前Freemarker使用的Locale实例 Locale currentLocale = 你当前使用的Locale对象; // 获取对应Locale的短日期格式化实例 SimpleDateFormat shortDateFormat = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.SHORT, currentLocale); // 从格式规则中提取分隔符 String dateSeparator = shortDateFormat.toPattern().replaceAll("[yMd]", "").substring(0, 1); // 注入Freemarker模型,模板中可直接读取${dateSeparator} model.addAttribute("dateSeparator", dateSeparator);
内容的提问来源于stack exchange,提问作者Alex Plouff
相关产品推荐
相关产品推荐

