Android 日期解析与格式化
Mar 13, 2016
Java 中有 java.text.DateFormat 这个类来专门处理日期格式,它的实例仅能通过三个工厂方法获取,然后就可以调用 format() 和 parse() 方法来格式化和解析了。
DateFormat.getDateInstance([int style[, Locale aLocale]])DateFormat.getDateTimeInstance([int dateStyle, int timeStyle[, Locale aLocale]])DateFormat.getTimeInstance([int style[, Locale aLocale]])
其中的 style 可以是 SHORT, MEDIUM, LONG 或者 FULL。
- SHORT is completely numeric, such as 12.13.52 or 3:30pm
- MEDIUM is longer, such as Jan 12, 1952
- LONG is longer, such as January 12, 1952 or 3:30:32pm
- FULL is pretty completely specified, such as Tuesday, April 12, 1952 AD or 3:30:42pm PST.
我们常用的是其子类 SimpleDateFormat,它可以直接传入一个字符串 pattern 来定义格式,详细文档可以看这里 http://developer.android.com/intl/zh-cn/reference/java/text/SimpleDateFormat.html。
坑出没注意
如果要解析的日期字符串不是纯数字(比如含有用文字表示的的月份或者周几)的话,一定要记得传入 Locale。
另外一种日期的格式化问题就是弄成那种像 2小时前,1天前 这样的格式。Android 其实自带了一个 DataUtils 类来处理这种格式。
formatDateRange() 可以格式化时间段,比如 3:00pm - 4:00pm,或者 Dec 31, 2007 - Jan 1, 2008。formatElapsedTime() 可以传入秒数,格式化成 MM:SS 或 H:MM:SS。formatSameDayTime 需要传入 now 参数,对在同一天的时间显示时间,不是同一天则仅显示日期。getRelativeDateTimeString() 就是我们常见的 2小时前 格式了。