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
之上提供的功能
特别值得注意的是,以下方法:
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());