jodatime DateTime 对象和语言环境
Posted
技术标签:
【中文标题】jodatime DateTime 对象和语言环境【英文标题】:jodatime DateTime objects and Locale 【发布时间】:2011-12-14 16:55:50 【问题描述】:鉴于此字段语言环境已设置为挪威 bokmål 和挪威:
Locale locale = new Locale("nb","no");
在为语言 bokmål 返回正确字符串的方法中,此代码片段缺少什么?
Assert.assertNotNull(locale);//Is asserted
MutableDateTime start = new MutableDateTime(2012,1, 10,10,0,0,0 );
start.setDayOfWeek(DateTimeConstants.SATURDAY);
System.out.println(start.dayOfWeek().getAsText(locale));
System.out.println(locale.getISO3Language().toString());
输出是“星期六,nob” 我是否需要自己实现特定于语言环境的工作日名称字符串?如果是这样,是否有一些基础对象或接口可以在 jodatime 中覆盖?我好像找不到。
【问题讨论】:
您的nb_NO
区域设置可用吗? docs.oracle.com/javase/tutorial/i18n/locale/identify.html
您使用MutableDateTime
有什么特别的原因吗?我的代码打印出我只能假设是适当的翻译:“lørdag”-您确定语言环境正在正确设置/传入吗?
不,我必须进一步调查语言环境。您链接的 Oracle 页面中的此代码仅呈现非常奇怪的“be ar”: public class AvailableLocales static public void main(String[] args) Locale list[] = DateFormat.getAvailableLocales(); for (Locale aLocale : list) System.out.println(aLocale.toString());
我只使用 MutableDateTime,因为我正在根据周选择逐步修改日期,并且似乎没有必要在方法内复制一系列不可变值对象。
请注意,简短的语言环境列表“be, ar”使用的是 openjdk,而不是 Apple jdk1.5。
【参考方案1】:
您的代码对我来说可以正常工作:
[system:/tmp]$ cat Loc.java
import org.joda.time.*;
import java.util.Locale;
class Loc
public static void main(String[] args)
Locale locale = new Locale("nb","no");
MutableDateTime start = new MutableDateTime(2012,1, 10,10,0,0,0 );
start.setDayOfWeek(DateTimeConstants.SATURDAY);
System.out.println(start.dayOfWeek().getAsText(locale));
System.out.println(locale.getISO3Language().toString());
[system:/tmp]$ java Loc
lørdag
nob
有几件事可以尝试:
尝试使用new Locale("nb", "NO")
(国家/地区为supposed to be case-insentive,但值得一试)
尝试使用new Locale("no", "NO")
或new Locale("nn", "NO")
- Nyorsk 可能不是您想要的,但它有效吗?从一些谷歌搜索来看,似乎某些平台可能会将nb_NO
视为no_NO
的别名?知道这是否有效可能很有用。
确保nb_NO
区域设置为available。这可能是因为getISO3Language()
似乎有效。
【讨论】:
感谢您的试驾和参考。我会尝试你的建议并报告。 您对 Oracle 链接的友好回复让我走上了正轨。我开始怀疑我使用的 openjdk7 端口不完整,并在获取所有可用语言环境时仅使用“ar”和“be”来证明这一点,并将我的项目更改为 Apples 提供的 jdk1.5。 “no_NO”仍然无法正常工作,并给了我瑞典语的工作日(我的系统设置为瑞典语)。 Apples jdk1.5 的正确代码至少是“不”。这给了我与你相似的结果: "lørdag nor" 。谢谢! 我希望 Rob 上面的回答在大多数情况下都是正确的,但对于 Apples jdk1.5 从 OS X 10.5.8 开始只有“没有”给出了我正在寻找的结果。以上是关于jodatime DateTime 对象和语言环境的主要内容,如果未能解决你的问题,请参考以下文章
Java - 使用DBUtils BeanListHandler将查询中的所有日期转换为JodaTime的DateTime
使用 ObjectMapper 为 JodaTime 设置时区偏移的 Jackson DateTime 格式