包含数字格式化DecimalFormat。日期时间格式化String.format()、SimpleDateFormat
使用DecimalFormat类(十进制数格式化)格式化数字,使用。DecimalFormat是NumberFormat的一个子类,用于格式化十进制数字。它将一些数字格式化为整数、浮点数、科学计数法、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。一般情况可以在实例化DecimalFormat对象时传递数字格式(API中不推荐),也可以通过DecimalFormat类中的applyPattern()方法来实现数字格式化。继承关系如下:
java.lang.Object
|-- java.text.Format
|-- java.text.NumberFormat //抽象类
|-- java.text.DecimalFormat
格式化符号参数如下:
0 |
一个数字 |
# |
一个数字,不包括 0 |
. |
小数的分隔符的占位符 |
, |
分组分隔符的占位符 |
; |
分隔格式。 |
- |
缺省负数前缀。 |
% |
乘以 100 和作为百分比显示 |
? |
乘以 1000 和作为千进制货币符显示;用货币符号代替;如果双写,用 国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代 替十进制分隔符。 |
X |
前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符 |
以下是JDK1.7 API中全部替代符:
测试代码如下:
DecimalFormat df1 = new DecimalFormat("0.0");//00.0或.0使用一样
DecimalFormat df2 = new DecimalFormat("#.#");
DecimalFormat df3 = new DecimalFormat("0000.0000");//不足位自动补0
DecimalFormat df4 = new DecimalFormat("###.#####");//不足位不显示
//df1.applyPattern("#.##");//此方法改变格式
System.out.println(df1.format(012.345));//输出12.3
System.out.println(df2.format(012.345)); //输出12.3
System.out.println(df3.format(012.345)); //输出0012.3450
System.out.println(df4.format(012.0345)); //输出12.0345
注意:DecimalFormat 通常不是同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问某个格式,则必须保持外部同步。
本文简单数字格式化使用,深入了解和具体方法详细使用参见API文档。
方法讲解:(多个参数对应format字符串中可能有多个格式化转换符,类似C语言)
代码实例:
Date today=new Date();
System.out.println(String.format(Locale.US,"%tb", today));
System.out.println(String.format(Locale.US,"%tB", today));
System.out.println(String.format("%ta", today));
System.out.println(String.format("%tA", today));
System.out.println(String.format("%tY", today));
System.out.println(String.format("%ty", today));
System.out.println(String.format("%tm", today));
System.out.println(String.format("%td", today));
System.out.println(String.format("这里可以添加文字,C语言printf格式化相似:%te", today));
System.out.println(String.format("可以多个格式化:%tY-%tm-%te", today, today, today));
输出结果如下:
Feb
February
星期四
星期四
2016
16
02
04
这里可以添加文字,C语言printf格式化相似:4
可以多个格式化:2016-02-4
使用format()方法对时间格式化时,用到时间格式化转换符。常用时间格式化转换符如表所示:
代码实例如下:
Date today=new Date();
System.out.println(String.format("%tH", today));
System.out.println(String.format("%tI", today));
System.out.println(String.format("%tk", today));
System.out.println(String.format("%tl", today));
System.out.println(String.format("%tM", today));
System.out.println(String.format("%tS", today));
System.out.println(String.format("%tZ", today));
System.out.println(String.format("%tp", today));
System.out.println(String.format("可以多个格式化:%tY-%tm-%te %tH:%tM:%tS", today, today, today, today, today, today));
输出结果:
13
01
13
1
22
18
CST
下午
可以多个格式化:2016-02-4 13:22:18
使用SimpleDateFormat类,格式化时间。常用的实例化使用如下
SimpleDateFormat sFormat = new SimpleDateFormat(String pattern);
或者
SimpleDateFormat sFormat = new SimpleDateFormat();
sFormat.applyPattern(String pattern);
或者
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL,Locale.getDefault());
//具体可取DateFormat.SHORT,DEFAULT,LONG,FULL等
格式化字符如下:
示例:
获取日期类处理的方法如下:(具体参见API,时间使用中有许多方法已被弃用,需注意)
Calendar c = Calendar.getInstance();
c.setTime(Date date);
时间格式化示例代码如下:
Calendar c1=Calendar.getInstance();
c1.setTime(new Date());
//Calendar c2 = Calendar.getInstance();
////当Calendar中设置的时间超过每项的最大值时,会以减去最大值后的值设置时间,例如月份设置13,最后会变成13-11=02
//c2.set(1920, 13, 24, 22, 32, 22);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat format2 = new SimpleDateFormat("yy-MM-dd H:m:s");
SimpleDateFormat format3 = new SimpleDateFormat("y-M-d H:m:s");
System.out.println(format.format(c1.getTime()));
System.out.println(format2.format(c1.getTime()));
System.out.println(format3.format(c1.getTime()));
输出结果如下:
2016-02-04 14:19:54
16-02-04 14:19:54
2016-2-4 14:19:54