每当我想将日期/时间格式打印成人类可读的形式时,IDE 会推荐我使用以下方式之一
getDateInstance()
getDateTimeInstance()
getTimeInstance()
但是,大多数时候,应用不同的int 样式
并不能满足我的要求。最后,我需要定义我自己的。
private static final ThreadLocal<SimpleDateFormat> dateFormatThreadLocal = new ThreadLocal <SimpleDateFormat>() {
@Override protected SimpleDateFormat initialValue() {
// January 2
return new SimpleDateFormat("MMMM d");
}
};
如果我也想支持非英语,这给我带来了麻烦。例如,对于中国市场,我需要使用单独的格式。
private static final ThreadLocal<SimpleDateFormat> dateFormatForChineseThreadLocal = new ThreadLocal <SimpleDateFormat>() {
@Override protected SimpleDateFormat initialValue() {
// 1月2日
return new SimpleDateFormat("MMMMd日");
}
};
我的代码将以下面的形式结束
public String dateString() {
if (chinese user) {
return dateFormatForChineseThreadLocal.get().format(calendar.getTime());
}
return dateFormatThreadLocal.get().format(calendar.getTime());
}
这使维护工作变得困难。我想知道,是否有更好的方法来为不同的本地化自定义日期/时间显示格式?
最佳答案
当您本地化您的应用程序时,您通常会为您的应用程序在 /src/main/res/
中支持的每种语言创建 strings.xml
文件,其中 values/
主要包含英文文件和 values-de
或 values-cn
德语或中文文件。当您在那里用您的格式定义一个字符串资源时,您可以简单地读出它并将该格式传递给您的日期格式化程序。
有了这个,您可以简单地添加新语言而无需更改代码中的任何行。
关于java - 为不同的本地化定制日期/时间显示格式的好方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51234976/