Java SimpleDataFormat-转换为其他语言环境
我定义了如下格式:Java SimpleDataFormat-转换为其他语言环境,java,simpledateformat,Java,Simpledateformat,我定义了如下格式: sdf = new SimpleDateFormat("MMMM dd\nEEEE, YYYY", Locale.getDefault()) // the string format is formatted in english, so we pass in Locale.ENGLISH new SimpleDateFormat("MMMM dd\nEEEE, YYYY", Locale.ENGLISH) 现在我在一些设备上遇到了例外情况,比如: java.lang.I
sdf = new SimpleDateFormat("MMMM dd\nEEEE, YYYY", Locale.getDefault())
// the string format is formatted in english, so we pass in Locale.ENGLISH
new SimpleDateFormat("MMMM dd\nEEEE, YYYY", Locale.ENGLISH)
现在我在一些设备上遇到了例外情况,比如:
java.lang.IllegalArgumentException: Unknown pattern character 'Y'
所以问题是,本地设备不支持Y
。因此,我必须将格式更改为以下格式:
sdf = new SimpleDateFormat("MMMM dd\nEEEE, YYYY", Locale.getDefault())
// the string format is formatted in english, so we pass in Locale.ENGLISH
new SimpleDateFormat("MMMM dd\nEEEE, YYYY", Locale.ENGLISH)
问题
现在如何使用此SimpleDataFormat
以区域设置语言打印日期?我想要EEEE
是德语、英语、西班牙语或其他语言。因此,我需要使用英语格式字符串,然后用本地语言打印格式字符串。我该怎么做
示例
SimpleDateFormat sdf = new SimpleDateFormat("MMMM dd\nEEEE, YYYY", Locale.getDefault());
Date d = new Date();
String formatted = sdf.format(d);
期望
意念
使用当前本地格式创建一个
SimpleDataFormat
,如new SimpleDataFormat(“MMMM-dd\neee,YYYY”,Locale.getDefault())代码>但是现在我不能确定传入构造函数的字符串对于当前区域设置是否有效。。。(如异常所示,Y
在每个语言环境中都无效)修复字符串必须位于同级引号内:
new SimpleDateFormat("MMMM dd'\n'EEEE',' yyyy", Locale.ENGLISH)
但是\n
是一个新行。希望你能把它放在那里
更新
(如异常所示,Y在所有语言环境中都无效):
Y在任何语言环境中都有效 您的输入日期是什么样子的?小心,Y是周,Y是年,如新日期()
或类似的。。。这就是问题吗?在你的问题中添加一个完成。。。我的问题不是关于这个,只是关于如何用英语定义格式,而是在任何语言环境中打印结果……我相信例外是特定于Android的。Java 8中的SimpleDataFormat
类无法生成它。您可能希望发布stacktrace,以便我们获得更多信息,并向我们提供有关出现异常的设备的详细信息。我希望它出现在那里,是的。但是如何用英语模式定义日期格式,但在任何语言环境中打印它呢?模式不依赖于语言环境。只有输出依赖于语言环境,所以异常是由缺少引号引起的?@prom85是的,这就是原因。还要注意大写和小写字符。如果这是真的,则模式区分大小写。只说引用字母A到Z和A到Z。“所有其他字符都不会被解释;它们只是在格式化期间复制到输出字符串中…”。正如你所说,\n
不是一个字母,它是一个新行。