java - 为不同的本地化定制日期/时间显示格式的好方法是什么

标签 java android

每当我想将日期/时间格式打印成人类可读的形式时,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-devalues-cn 德语或中文文件。当您在那里用您的格式定义一个字符串资源时,您可以简单地读出它并将该格式传递给您的日期格式化程序。

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

关于java - 为不同的本地化定制日期/时间显示格式的好方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51234976/

相关文章:

java - 单例和静态实用程序类

java - 引用 jar 文件中的网页

android - 模态/对话框未在宽度上应用匹配父布局

android - 在斜线和主要 Activity 之间分支 init

android - 在 Phonegap for android 中的 Html 页面之间传递值

Android程序连接Facebook : LoginActivity has leaked window

java - "instanceof"运算符的这种使用是否被认为是糟糕的设计?

java - 安卓 : what's the procedure to write functions for alertdialog item?

java - 如何将 Hessian 与 Guice 集成?

android - onDoupleTap 不触发