SimpleDateFormat - 转换为其他语言环境

SimpleDateFormat - convert to other locale

我定义了如下格式:

sdf = new SimpleDateFormat("MMMM dd\nEEEE, YYYY", Locale.getDefault())

现在我在某些设备上遇到异常,例如:

java.lang.IllegalArgumentException: Unknown pattern character 'Y'

所以问题是,Y 在此设备本地不支持。所以我必须将格式更改为以下内容:

// the string format is formatted in english, so we pass in Locale.ENGLISH
new SimpleDateFormat("MMMM dd\nEEEE, YYYY", Locale.ENGLISH)

问题

我现在如何使用此 SimpleDateFormat 以本地语言打印日期?我希望 EEEE 是德语、英语、西班牙语或其他语言。所以我需要使用英文格式字符串,然后用本地语言打印格式化字符串。我该怎么做?

例子

SimpleDateFormat sdf = new SimpleDateFormat("MMMM dd\nEEEE, YYYY", Locale.getDefault());
Date d = new Date();
String formatted = sdf.format(d);

预计

DE: Juli 2017\nMittwoch, 2017
EN: July 2017\nWednesday, 2017

想法

使用当前本地创建一个 SimpleDateFormat,例如 new SimpleDateFormat("MMMM dd\nEEEE, YYYY", Locale.getDefault());,但现在我无法确定传递给构造函数的字符串是否对当前语言环境有效...(如异常表明,Y 并非在每个语言环境中都有效)

修复字符串必须在单引号内:

new SimpleDateFormat("MMMM dd'\n'EEEE',' yyyy", Locale.ENGLISH)

但是\n是一个换行符。希望你想要它。

更新

(如异常所示,Y 并非在所有语言环境中均有效): Y 在每个语言环境中都有效!!