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小时前
格式了。