使用 NumberFormat 格式化数字
抽象类 Format 有子类:MessageFormat、NumberFormat、DateFormat。NumberFormat、DateFormat 可以将数值、日期转换成字符串,也可以将字符串转换成数值、日期。
NumberFormat 和 DateFormat 类都包含了 format() 和 parse() 方法,其中 format() 用于将 数值、日期 格式化成字符串,parse() 用于将字符串解析成数值、日期。
NumberFormat 是一个抽象基类,提供了如下几个类方法来得到对象:
- getCurrencyInstance():返回默认 Locale 的货币格式器,也可以在调用该方法时传入指定的 Locale,则获取指定 Locale 的货币格式器。
- getIntegerInstance():返回默认 Locale 的整数格式器,也可以在调用该方法时传入指定的 Locale,则获取指定 Locale 的货币格式器。
- getNumberInstance():返回默认 Locale 的通用数值格式器,也可以在调用该方法时传入指定的 Locale,则获取指定 Locale 的货币格式器。
- getPercentInstance():返回默认 Locale 的百分数格式器,也可以在调用该方法时传入指定的 Locale,则获取指定 Locale 的货币格式器。
一旦取得 NumberFormat 对象后,就可以调用它的 format() 方法来格式化数值,包括整数和浮点数。
使用 DateFormat 格式化日期、时间
DateFormat 也是一个抽象类,提供如下几个类方法用于获取 DateFormat 实例:
- getDateInstance():返回一个日期格式器,它格式化后的字符串只有日期,没有时间。该方法可以传入多个参数,用于指定日期样式和 Locale 等参数,不指定就使用默认参数。
- getTimeInstance():返回一个时间格式器,它格式化后的字符串只有时间,没有日期。该方法可以传入多个参数,用于指定日期样式和 Locale 等参数,不指定就使用默认参数。
- getDateTimeInstance():返回一个日期、时间格式器,它格式化后的字符串既有日期,也有时间。该方法可以传入多个参数,用于指定日期样式、时间样式和 Locale 等参数,不指定就使用默认参数。
可以通过 DateFormat 的 4 个静态常量指定日期、时间样式:
- FULL:例如 Friday,December 2,2018
- LONG:例如 December 2,2018
- MEDIUM:例如 Dec 2,2018
- SHORT:例如 12/2/18
1 | //需要被格式化的时间 |
获得了 DateFormat 对象之后,还可以调用它的 setLenient(boolean lenient) 方法类设置该格式器是否采用严格语法
DateFormat 的 parse() 方法可以把一个字符串解析成 Date 对象。
使用 SimpleDateFormat 格式化日期
SimpleDateFormat 是 DateFormat 的子类,创建 SimpleDateFormat 对象时需要传入一个 pattern 字符串,是一个日期模板字串,用来定制自己的日期格式。1
2
3
4
5//定制自己的日期格式
String pattern = "YYYY/MM/dd";
SimpleDateFormat dateFomat = new SimpleDateFormat(pattern);
System.out.println(dateFormat.format(new Date());
Java8 新增的日期、时间格式器
Java8 新增的日期、时间API里不仅包括了 Instant、LocalDate、LocalDateTime、LocalTime 等代表日期、时间的类,而且在 java.time.format 包下提供了一个 DateTimeFormatter 格式器类,该类相当于前面介绍的 DateFormat 和 SimpleDateFormat 的合体,功能非常强大。
创建格式器实例
首先获取 DateTimeFormatter 对象,途径有:
- 直接使用静态常量创建格式器:ISO_LOCAL_DATE、ISO_LOCAL_TIME、ISO_LOCAL_DATE_TIME 等静态常量,这些静态常量本身就是 DateTimeFormat 实例。
- 使用代表不同风格的枚举值来创建格式器,在 FormatStyle 枚举类中定义了 FULL、LOGN、MEDIUM、SHORT 四个枚举值。
- 根据模式字符串来创建格式器。
完成格式化
使用 DateTimeFormatter 把日期、时间格式化为字符串:
- 调用 format(TemporalAccessor temporal) 方法执行格式化,LocalDate、LocalDateTime、LocalTime 等类都是 TemporalAccessor 接口的实现类。
- 调用 LocalDate、LocalDateTime、LocalTime 等日期、时间对象的 format(DateTimeFormatter formatter) 方法执行格式化。
解析字符串
将指定格式的字符串解析成日期、时间对象,通过日期、时间对象提供的 parse(CharSequence text,DateTimeFormatter formatter) 方法进行解析。