gpt4 book ai didi

java - SimpleDateFormat 本地化月份名称

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:22:54 27 4
gpt4 key购买 nike

我在整个网站上进行了搜索,但我认为我的问题略有不同,在我心力衰竭或烧毁计算机之前确实需要一些帮助。

我动态生成月份名称列表(格式为 2011 年 6 月、2011 年 7 月),显然我希望它对区域设置敏感:因此我使用如下简单的日期格式对象:

//the actual locale name is dependent on UI selection
Locale localeObject=new Locale("pl");
// intended to return full month name - in local language.
DateFormat dtFormat = new SimpleDateFormat("MMMM yyyy",localeObject);
//this bit just sets up a calendar (used for other bits but here to illustrate the issue
String systemTimeZoneName = "GMT";
TimeZone systemTimeZone=TimeZone.getTimeZone(systemTimeZoneName);
Calendar mCal = new GregorianCalendar(systemTimeZone); //"gmt" time
mCal.getTime(); //current date and time

但是如果我这样做:

String value=dtFormat.format(mCal.getTime()); 

这个“应该”返回月份名称的本地化版本。在波兰语中,“September”这个词是“Wrzesień”——注意 n 的重音。然而我得到的只是“Wrzesie?”

我做错了什么?

感谢所有人 - 我现在接受这是一个演示问题 - 但我如何才能安全地“读取”dtFormat 的结果 - 我在 ref 下面使用 getBytes 等添加了一些评论 - 这在其他情况下有效,我只是可以'似乎在不弄乱的情况下访问字符串结果

-- 最终编辑;对于遇到此问题的任何人

答案在 BalusC 的博客上:http://balusc.blogspot.com/2009/05/unicode-how-to-get-characters-right.html#DevelopmentEnvironment

基本上 DTformat 对象返回 UTF-8,当我将其读入字符串时自动转换回系统默认字符集

所以这段代码对我有用

new String(dtFormat.format(mCal.getTime()).getBytes("UTF-8"),"ISO-8859-1");

非常感谢您的帮助

最佳答案

您的问题与 SimpleDateFormat 无关 - 您只是对结果做了错误的事情。

您还没有告诉我们您之后对字符串做了什么 - 您如何在 UI 中显示它 - 但这就是问题所在。您可以看到它正在获取本地化的字符串;这只是导致问题的重音字符的显示。如果您有一个包含相同重音字符的字符串常量,您会看到完全相同的结果。

如果是 Web 应用程序,我建议您检查整个应用程序使用的所有编码;如果它是控制台或 Swing 应用程序,则检查您显示字符串所用的字体。

如果您在调试器中检查字符串,我相信您会发现它具有完全正确的字符 - 这正是它们到达用户的方式,这就是问题所在。

关于java - SimpleDateFormat 本地化月份名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7638988/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com