Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.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 确保DateFormat的年份字段仅为两位数的可移植方法_Java_Android - Fatal编程技术网

Java 确保DateFormat的年份字段仅为两位数的可移植方法

Java 确保DateFormat的年份字段仅为两位数的可移植方法,java,android,Java,Android,目前,我有 private ThreadLocal<DateFormat> shortDateFormat = new ThreadLocal<DateFormat>() { @Override protected DateFormat initialValue() { final DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT); return for

目前,我有

private ThreadLocal<DateFormat> shortDateFormat = new ThreadLocal<DateFormat>() {
    @Override protected DateFormat initialValue() {
        final DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT);
        return format;
    }
};
private ThreadLocal shortDateFormat=new ThreadLocal(){
@重写受保护的DateFormat初始值(){
final DateFormat=DateFormat.getDateInstance(DateFormat.SHORT);
返回格式;
}
};
使用我的Android 4.1,这为我提供了格式上的日期(在我的本地化版本中,其他国家可能会有所不同)

2013年7月19日

但是,有时我希望有一个更简短的版本,如19/07/13

我不想硬编码为

dd/MM/yy

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

是否有任何可移植的方法来实现这一点


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

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


如果您没有定义特定的国家/地区,如何创建一个基于国家/地区ISO代码的本地化模式和备用默认模式的地图

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

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

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

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

您应该看看
android.text.format.DateFormat
java.text.DateFormat
之上提供的功能

特别值得注意的是,以下方法:

Javadoc:

获取存储为字符数组的当前日期格式阵列将 按指定的顺序包含3个元素(日期、月份和年份) 用户的格式首选项。请注意,此顺序仅适用 所有数字日期;指定的(中长)日期将 通常包含其他标点、空格或单词,而不仅仅是 日、月和年,不一定按相同的顺序返回 在这里

换言之,该方法允许您根据用户的首选项(如果您要求的话,它会战胜用户的区域设置)确定日期、月份和年份字段的顺序。从那里应该很容易找到什么'短'格式使用;i、 e.
dd/MM/yy
MM/dd/yy


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

问题是如何将日期转换为正确的字符串格式。没有从日期本身提取单个信息组件。但这是另一个问题,一些国家,如中国,他们使用19-07-13或19-07-2013。其他国家可能会有更多的边缘案例,但我不知道。@CheokYanCheng我相信我找到了解决方案。@SteveP。请与我们分享您的解决方案:)@CheokYanCheng无论地区如何,这都应该有效,因为尽管有订购,但由于我们使用的是
applyPattern
,年份将始终以
y
表示,如果我们改为使用
ApplyCalizedPattern
,它将不适用于某些地区,由于并非所有国家都用
y
来表示年份。因为我们谈论的是Android设备,我仍然建议至少使用
Android.text.format.DateFormat.getDateFormat(上下文上下文)
来获得与用户偏好匹配的“短”
DateFormat
对象。
SimpleDateFormat dateFormat = (SimpleDateFormat)     
                 android.text.format.DateFormat.getDateFormat(getApplicationContext());