有什么好的方法可以针对不同的本地化自定义日期/时间显示格式

时间:2018-07-08 18:36:51

标签: java android

每当我想将日期/时间格式打印为易于阅读的格式时,IDE都会建议我使用以下一种方式

getDateInstance()
getDateTimeInstance()
getTimeInstance()

但是,大多数情况下,应用不同的int style不能满足我的要求。最后,我需要定义自己的内容。

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());
}

这使维护工作变得困难。我想知道是否有更好的方法来针对不同的本地化自定义日期/时间显示格式?

1 个答案:

答案 0 :(得分:1)

在对应用进行本地化时,通常会以strings.xml为应用支持的每种语言创建/src/main/res/文件,其中values/主要包含英文文件,而values-de或{ {1}}例如德语或中文。当您在其中定义格式的字符串资源时,只需读取该格式并将其传递给日期格式器即可。

这样,您可以简单地添加新语言,而无需更改代码中的任何行。