如果您使用 Joda Time(如果您有任何选择,为什么不选择?它几乎被捆绑到 JDK 1.7 中)您可以执行以下操作:
String patternForStyleAndLocale = org.joda.time.format.DateTimeFormat.patternForStyle("S-", locale);
不幸的是,这仅给出了两位数的年份。一种解决方法是:
if (!org.apache.commons.lang.StringUtils.contains(patternForStyleAndLocale, "yyyy"))
{
// The default Joda pattern only has a two digit year for US and Europe, China etc - but we want four digit years
patternForStyleAndLocale = StringUtils.replace(patternForStyleAndLocale, "yy", "yyyy");
}
您可以考虑将它们缓存在 ConcurrentHashMap<Locale, String> 中。
像这样将数字日期作为预本地化模式获取的好处是,它以后不需要任何进一步的本地化,如果您使用以下模式就会这样做:
"dd MMM yyyy" // UK: "25 Dec 2010" FRANCE: "25 déc. 2010" etc..
但是...我刚刚从您后来的评论中注意到,您希望将模式传递给 JavaScript - 这可能会变得非常困难,因为 JS 使用与 Java 不同的模式格式(例如 ISO 日期是"yyyy-MM-dd" 在 Java 中和 "yy-mm-dd" 在 JS 中)。我没有尝试解决这个问题,但我可能会在 JS 或 Java 中使用一些字符串映射来简单地从 Java 模式映射到 JS。当然,您必须提前了解每种语言可能遇到的每种模式。