5

目前,我有

private ThreadLocal<DateFormat> shortDateFormat = new ThreadLocal<DateFormat>() {
    @Override protected DateFormat initialValue() {
        final DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT);
        return format;
    }
};

使用我的 Android 4.1,这为我提供了日期格式(在我的本地化中。其他国家/地区可能看起来不同)

2013 年 7 月 19 日

但是,有时我想要一个更短的版本,比如19/07/13

我不想硬编码为

日/月/年

由于上述方式无法在不同国家/地区移植。有些国家,他们的月份比日期早。

有什么便携的方法可以实现吗?

p/s 不仅是月/日顺序。可能还有其他问题。例如,中国使用 19-07-13 或 19-07-2013。其他国家可能会有更多的边缘案例,但我不知道。

4

4 回答 4

3
SimpleDateFormat dateFormat= (SimpleDateFormat) DateFormat.getDateInstance();
dateFormat.applyPattern(dateFormat.toPattern().replaceAll("y{4}", "yy"));

说明:

applyPattern(String pattern)将给定的模式字符串应用于此日期格式。

dateFormat.toPattern()获取当前模式

dateFormat.toPattern().replaceAll(String regex, String replacement)返回当前模式,regex替换为replacement.

"y{4}"查看一系列 4 y 的日期格式模式,并
"yy"说如果您看到 4 y,请将它们替换为 2。

希望有帮助。祝你好运。

编辑:
正如 MH 所指出的,因为这是针对 android 的,所以使用它可能更合适:

SimpleDateFormat dateFormat = (SimpleDateFormat)     
                 android.text.format.DateFormat.getDateFormat(getApplicationContext());

这应该可以正常工作,因为上述方法调用返回 a DateFormatof java.text.DateFormat,而不是 of android.text.format.DateFormat

于 2013-07-18T18:51:16.113 回答
1

您应该看看android.text.format.DateFormat提供的功能,在java.text.DateFormat.

特别是,以下方法会很有趣:

Java 文档:

获取存储为 char 数组的当前日期格式。该数组将包含 3 个元素(DATE、MONTH 和 YEAR),按用户的格式偏好指定的顺序排列。请注意,此顺序仅适用于全数字日期;拼写出来的(MEDIUM 和 LONG)日期通常包含其他标点符号、空格或单词,而不仅仅是日、月和年,并且不一定按照此处返回的相同顺序。

换句话说,该方法允许您根据用户的偏好确定日、月和年字段的顺序(如果您问我,这会胜过用户的语言环境)。从那里应该很容易弄清楚要使用什么“短”格式;即dd/MM/yyMM/dd/yy

正如文档所指出的,该方法的返回值仅在全数字日期表示的上下文中有用。在你的情况下应该没问题。

于 2013-07-18T19:33:39.420 回答
0

如果您想要便携,而不是使用日期对象,您可以创建一个包含月份、日期和年份的数组。(我只会使用 cal 对象并分别访问这三个对象)

Calendar cal = Calendar.getInstance();
int year =cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day= cal.get(Calendar.DAY);


dateArray[0] = month;
dateArray[1] = year;
dateArray[2] = day;
于 2013-07-18T18:00:11.410 回答
0

如果您没有定义特定的国家,如何根据国家 ISO 代码和后备默认模式创建具有本地化模式的地图?

于 2013-07-18T18:09:20.453 回答