Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为不同的本地化定制日期/时间显示格式的好方法有哪些_Java_Android - Fatal编程技术网

Java 为不同的本地化定制日期/时间显示格式的好方法有哪些

Java 为不同的本地化定制日期/时间显示格式的好方法有哪些,java,android,Java,Android,每当我想将日期/时间格式打印成人类可读的格式时,IDE都会建议我使用以下方法之一 getDateInstance() getDateTimeInstance() getTimeInstance() 然而,大多数时候,应用不同的int样式并不符合我的要求。最后,我需要定义我自己的 private static final ThreadLocal<SimpleDateFormat> dateFormatThreadLocal = new ThreadLocal <SimpleDa

每当我想将日期/时间格式打印成人类可读的格式时,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");
    }
};

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

当你本地化你的应用程序时,你通常会为你的应用程序支持的每种语言创建
字符串.xml
文件
/src/main/res/
,其中
values/
主要包含英文文件,例如
values de
values cn
德语或中文文件。当您使用您的格式定义一个字符串资源时,您可以简单地读出它并将该格式传递给您的日期格式化程序


有了它,您只需添加新的语言,而无需更改代码中的任何一行。

使用以下选项之一。如果不能做到这一点,您可能需要使用,并且必须为所有受支持的区域设置提供格式。不幸的是,大多数情况下,预定义的格式不符合我们的UI要求。为什么不在strings.xml中定义格式?当您读取本地化字符串时,您可以将该格式传递给日期格式化程序,您就完成了?!通过这种方式,您始终具有可维护性,因为您为应用程序支持的语言提供了所有格式。是的。我错过了那一点。你能把这个方法作为答案吗?
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());
}