1. 字符串:String.format
String.format(Locale locale,String format,Object…args)
locale:指定语言环境(选填)
format:格式化语句
args:被格式化的参数
占位转换符 | 释义 | 示例 |
---|---|---|
%s | 字符串类型 | “sdsd” |
%c | 字符类型 | ‘s’ |
%b | 布尔类型 | true |
%d | 整数(十进制) | 12 |
%x | 整数(十六进制),对应十进制的值 | c |
%o | 整数(八进制),对应十进制的值 | 14 |
%f | 浮点型,显示9位有效数字,且会进行四舍五入 | 0.2 |
%a | 十六进制浮点型, 0.2对应得值 | 0x1.9ap-3 |
%e | 指数类型 ,0.2对应得值 | 2e-01 |
%% | 百分比 | 10% |
%n | 换行符 | |
%tx | 日期时间,参数x:日期的格式 |
数字
System.out.println(String.format("整数:%d,十六进制:%x,八进制:%o", 12,12,12));
//输出:整数:12,十六进制:c,八进制:14
System.out.println(String.format("小数:%.2f,十六进制:%.2a,指数:%e",0.2,0.2,0.02));
//输出:小数:0.20,十六进制:0x1.9ap-3,指数:2.000000e-01 保留2位小数%.2f
数字对应得转换符标志
标志 | 说明 | 示例 | 结果 |
---|---|---|---|
+ | 给正数添加+符号,负数不添加 | (“%+d”,5) | +5 |
- | 左对齐 | (“!%-3d!”,5) | !5 ! |
0 | 数字前不够补0 | (“%03,5”) | 005 |
空格 | 添加空格 | (“!%3d!”,5) | ! 5! |
, | 对数字分组 | (“%,d”,1111) | 1,111 |
( | 用括号包含负数,正数无效 | (“%(d”,-5) | (5) |
# | 给八进制(0)和十六进制(0x)添加前缀 | ||
< | 格式化前一个转换符对应得参数 | (“%.2f和%<.1f”,0.111) | 0.11和0.1 |
$ | 被格式化的参数索引 | ("%2$d",1,4) | 4 |
常见日期和时间组合的格式
转换符 | 说明 | 示例 |
---|---|---|
c | 包括全部日期和时间信息 | 星期三 十二月 19 14:21:20 CST 2018 |
F | “年-月-日”格式 | 2018-12-19 |
D | “月/日/年”格式 | 18/12/19 |
r | “HH:MM:SS PM”格式(12时制) | 02:25:51 下午 |
T | “HH:MM:SS”格式(24时制) | 14:28:16 |
R | “HH:MM”格式(24时制) | 14:28 |
b或者h | 月份简称 | 中:十二月英:Dec |
B | 月份全称 | 中:十二月英:December |
a | 星期的简称 | 中:星期三英:Wed |
A | 星期的全称 | 中:星期三六英:Wednesday |
C | 年的前两位数字(不足两位前面补0) | 20 |
y | 年的后两位数字(不足两位前面补0) | 12 |
Y | 4位数字的年份(不足4位前面补0) | 2018 |
j | 一年中的天数(即年的第几天) | 353 |
m | 两位数字的月份(不足两位前面补0) | 12 |
d | 两位数字的日(不足两位前面补0) | 19 |
e | 月份的日(前面不补0) | 19 |
System.out.println(String.format("%tF",new Date()));//输出2018-12-19
2. 日期:DateFormat
DateFormat
//DateFormat
Date d=new Date();
DateFormat df=DateFormat.getDateInstance();
String str=df.format(d);//格式YYYY-MM-dd
getDateInstance()—YYYY-MM-dd
getDateTimeInstance—YYYY-MM-dd HH:mm:ss
getTimeInstance—hh:mm:ss
getInstance—YY-MM-dd 下午/上午hh:mm
SimpleDateFormat
//SimpleDateFormat
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("今天是yyyy-MM-dd hh:mm:ss");//默认中文添加参数Locale.ENGLISH英文显示
String str=sdf.format(d);
字母 | 日期或时间 | 示例 |
---|---|---|
y | 年 | yyyy/2018,yy/18 |
M | 月 | MM/08,M/8 |
w | 年中的第几周 | w/52,ww/04 |
W | 月中的第几周 | W/3,WW/04 |
D | 年中的第几天 | 324 |
d | 月中的第几天 | dd/04 |
E | 星期几 | 星期一/Mon |
a | AM/PM标记 | 下午/PM,上午/AM |
H | 小时(0~23) | HH/08 |
h | 小时(1~12) | hh/09 |
m | 分钟 | mm/04 |
s | 秒 | ss/05 |
S | 毫秒 | s/435 |
3. 数字
NumberFormat
//NumberFormat
NumberFormat f=NumberFormat.getCurrencyInstance();//添加参数Locale对象指定语言环境
String str=f.format(2323.325);//¥2,323.32,小数点2位之后的五舍四入
getCurrencyInstance()–根据当前语言环境获取货币格式,可通过Locale对象为参数设置语言环境
getInstance()/getNumberInstance()–获取常规数值格式
getIntegerInstance()–整数格式,小数四舍五入
getPercentInstance()–获取百分比格式,小数点2位之后的五舍六入0.585–58%
DecimalFormat
//DecimalFormat
DecimalFormat df=new DecimalFormat();//默认显示3位小数四舍五入
System.out.println(df.format(2018.3454));//输出:2,018.345
df.setMaximumFractionDigits(4);//设置小数位最大位数
System.out.println(df.format(2018.3454));//输出:2,018.3454
df.setMinimumFractionDigits(2);//设置小数位最小位数不够补0
System.out.println(df.format(2018.1));//输出:2,018.10
df.setMaximumIntegerDigits(4);//设置整数最大位数
System.out.println(df.format(12018.1));//输出:2018.10
df.setMinimumIntegerDigits(3);//设置整数最小位数不足补0
System.out.println(df.format(20));//输出:020.00
df.setGroupingUsed(false);//设置是否分组false不分组,默认为true
System.out.println(df.format(2018.1));//输出:2018.10
元素 | 所对应得释义 |
---|---|
0 | 表示一个数字,不够补0 |
# | 表示一个数字,不够忽略 |
. | 小数点分隔占位符 |
, | 分组分隔占位符 |
- | 缺省负数前缀 |
% | 值乘以100并显示为百分数 |
\u2030 | 值乘以1000并显示为千分数 |
DecimalFormat df=new DecimalFormat("00,000.###");
System.out.println(df.format(111.03));//输出:00,111.03
DecimalFormat df1=new DecimalFormat("#%");
System.out.println(df1.format(1.12));//输出:112%
DecimalFormat df2=new DecimalFormat("#\u2030");
System.out.println(df2.format(1.12));//输出:1120‰
ChoiceFormat–格式化复数
//格式化一个数组中的数字,构造参数为(double[] limits,String[] formats)
double[] limits={1,2,3,4,5,6,7};//必须为升序排列且为double数组
String[] formats={"Mon","Tue","Web","Thur","Fri","Sat","Sun"};//和limits一一对应
ChoiceFormat cf=new ChoiceFormat(limits,formats);
System.out.println(cf.format(0.4));//输出:Mon,没有比1更小的值选择1对应得星期
System.out.println(cf.format(2.4));//输出:Tue,有比2.4小的数选择2对应得星期
System.out.println(cf.format(2.7));//输出:Tue
System.out.println(cf.format(8));//输出:Sun
//参数为一个模式字符串 doubleNum [占位符] formatStr
//占位符#、< 、\u2264(<=)
ChoiceFormat cf=new ChoiceFormat("1 # one | 2 < two | 4 \u2264 three");
//doubleNum必需为升序,分隔符为‘|’
System.out.println(cf.format(0));//输出:one 最接近1,满足第一个公式
System.out.println(cf.format(1));//输出:one 小于2,满足第一个公式
System.out.println(cf.format(2));//输出:one 小于2,满足第一个公式
System.out.println(cf.format(3));//输出:two 大于2,满足第二个公式
System.out.println(cf.format(4));//输出:three 等于4,满足第三个公式
System.out.println(cf.format(5));//输出:three 大于4,满足第三个公式
MessageFormate
int num=4;
String str="串";
String result= MessageFormat.//{index,type} type:time-时间(时分秒),date-日期(年月日),number-数字
format("开始{0,time} to {0,date}, {1} on 数字 {2,number}", new Date(),str,num);
System.out.println(result);//输出开始14:54:50 to 2018-12-19, 串 on 数字 4
//详情:http://www.cnblogs.com/fsjohnhuang/p/4095059.html