日常工作中,总会遇到一些格式化显示的需求,下面做一些简单的整理
JDK中java.text下提供了格式化常用的工具类,具体结构见下图
时间日期格式化
DateFormat
采用DateFormat.get%Instance()方法进行实例化,提供format()进行格式化,可以讲Date和String两种类型的日期时间进行互转
例如
DateFormat.getInstance().format(Calender.getInstance().getTime());
这种方法可以获得当前时间的格式化,但是并未制定格式。DateFormat方法并不提供自定义格式。因此SimpleDateFormat是一种较好的选择
SimpleDateFormat
采用new的方式实例化,可以自定义格式化格式。
例如
String model = "yyyy/MM/dd hh:mm:ss"; sdf = new SimpleDateFormat(model); Date date = Calendar.getInstance().getTime(); System.out.println(sdf.format(date));
常用的格式化字符
G:AD / BD
y:year
M:month
d:day
h/H:hour 12小时制/24小时制
m:minites
s:second
S:s/1000
数字格式化
NumberFormat
NuberFormat采用getXXXInstance获取格式化实例,可以 自动添加千分符,百分号,金额等格式化
getInstance() 返回当前默认语言环境的通用数值格式
getIntegerInstance() 返回当前默认语言环境的整数格式
getMaximumFractionDigits()返回数的小数部分所允许的最大位数
getCurrencyInstance() 返回当前默认语言环境的货币格式
NumberFormat不能自己指定格式化格式,可以使用它的子类进行实现。
DecimalFormat
使用方法
new DecimalFormat(pattern).format(123456.789);
重点pattern的用法,如何定义一个pattern.
#代表数字
.代表小数点
,分隔符
%百分号
u2030千分符(键盘上无法直接打出)
E科学计数法
简单列举一些常用的pattern
千分符分割数字(Ps:千分符小数位不需要分割即123,456.0123456)#,###.##### 小数点后需要保留多少位看需要,对于0.12和12.0会显示成.12和12.。
改进的千分符分割数字:#,##0.0###
科学计数法:0.0##E0
格式化百分比:#,###.00%
格式化千分比:#,###.00u2030
ChoiceFormat
使用方法:
double[] limits = {0,1,2,3};//限制条件
String[] formats = {"0~1","1~2","2~3","3~"}//格式化输出的结果;限制条件和格式化结果数量必须一致
ChoiceFormat cf = new ChoiceFormat(limits,formats);
cf.format(1.2);
注意:limits顺序无所谓,ChoiceFormat使用之前会进行排序
实现的功能类似if else,以上述limits为例,比较条件为0<=x<1,1<=x<2,2<=x<3,3<=x 然后在对应到formats对应位置的格式化输出位置的值
可以理解成这个样子
double x = 1.2; String format ; if(0<=x && x<1) format = "0~1"; else if(1<=x && x<2) format = "1~2"; else if(2<=x && x<3) format = "2~3"; else if(3<=x) format = "3~";
消息格式化
MessageFormat
作用:类似Log4J那种输出,自定义一些标准化输出信息,然后按照定义的规则输出内容.
用法:MessageFormat.format("logger {0,date} {0,time}:Hello {1},This {2} ", new Date(),"Tom","HanMeiMei");