Android DateFormat的简单示例

在《Android Programming : The Big Nerd Ranch Guide (3rd Edition)》书中,作者提出用DateFormat方法来格式化时间。


Android DateFormat的简单示例_第1张图片

在之前的代码中,通过Date()获取当前的时间,但是Date时间对象显示十分冗长,不方便用户查看。


Android DateFormat的简单示例_第2张图片

那么接下来,我们使用DateFormat来格式化时间。在Crime类中,申明一个新的字符串变量,命名为mDateStr,并生成其getter方法。在构造函数中,添加DateFormat方法。
private String mDateStr;
Crime() {
        mId = UUID.randomUUID();
        mDate = new Date();
        DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.ENGLISH);
        mDateStr = dateFormat.format(mDate);
    }
public String getmDateStr() {
        return mDateStr;
    }

除了getDateInstance获取时间的实例对象外,DateFormat还可以获取getTimeInstance(获取时间)、getDateTimeInstance(获取日期和时间)这两个实例对象。其中的两个参数,前者表示日期/时间显示的格式,包括FULL、LONG、MEDIUM、SHORT,可以通过调试看下他们的区别;后者表示地区。
下图为MEDIUM的格式。


Android DateFormat的简单示例_第3张图片

有些需求会要求日期显示两位数,比如“2019-03-04”,以上方法就不适用了,我们可以用SimpleDateFormat来客制化日期格式。
SimpleDateFormat是DateFormat的一个子类,在调整代码之前,需要了解SimpleDateFormat中一些模式字母(pattern letters)的含义。oracle相关文档中解释得很详细:


Android DateFormat的简单示例_第4张图片

常用的一些表示,归纳如下:
y:年
M:月
d:日
h:时(12小时制,0-12)
H:时(24小时制,0-23)
m:分
s:秒
S:毫秒
E:星期几
a:上下午标识

了解这些后,就可以修改代码啦,将DateFormat相关代码注释掉,换成SimpleDateFormat。

Crime() {
        mId = UUID.randomUUID();
        mDate = new Date();
//        DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.ENGLISH);
//        mDateStr = dateFormat.format(mDate);
        SimpleDateFormat dateFormat = new SimpleDateFormat("E,MM dd,yyyy", Locale.ENGLISH);
        mDateStr = dateFormat.format(mDate);
    }

运行代码,效果如下:


Android DateFormat的简单示例_第5张图片

这时,“月/日”都是两位数了,但这看上去很突兀,如果能把月换成英文就好看了,查阅SimpleDateFormat相关文档,可以看到



如果字母数大于等于3个时,月份显示为文字,否则就显示为数字;当字母大于等于4个时显示全称,否则显示缩写。因此,可以做以下微调:
Crime() {
        mId = UUID.randomUUID();
        mDate = new Date();
//        DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.ENGLISH);
//        mDateStr = dateFormat.format(mDate);
        SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE,MMMM dd,yyyy", Locale.ENGLISH);
        mDateStr = dateFormat.format(mDate);
    }

此时再运行代码,就可以得到我们想要的效果。


Android DateFormat的简单示例_第6张图片

你可能感兴趣的:(Android DateFormat的简单示例)