1.时间类型格式化
1-1.Date(日期)
Date类是一个非抽象类,也就是具体类,那么就可以将其实例化,实例化会使用系统的当前日期和时间创建一个日期对象,这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间,通过Date类的get方法可以拿到我们想要的具体数据,也可以通过set方法来设置特定的时间和日期。要注意的是通过get方法拿到的某些值是与1999年01月01日0时0分的相对值。比如现在如果是2016年,那么下图代码的输出为116。
我们可以发现这个getYear()方法上有一个横线,其实Date的好多方法都是如此,原因是不被推荐使用,而被推荐的是使用Calendar类来达到相关的目的。
1-2.Calendar(日历)
Calendar类是一个抽象类,通常通过getInstance()方法得到一个当前时区,当前语言设置下的实例。
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
现在是2016年12月,那么year的值为2016,month的值为11(一月是0)。
我们也可以通过其set方法设置我们想要的时间和日期。要注意的是通过Date类和Calendar类的set方法设置日期时间后,再通过get方法拿到的是我们设置的时间和日期。
图(2)year和month的值为2015和5(6月)。
1-3.DateFormat(日期格式)
DateFormat类也是一个抽象类,通常使用其具体子类SimpleDateFormat来对日期类型(Date类型)进行格式化,使用其构造方法实例化一个SimpleDateFormat,并给出想要的格式就可以对Date类型进行格式化了。
Sun Dec 04 13:25:14 CST 2016
2016-12-04 13:25:14
2.数字格式化和精度
2-1.使用NumberFormat
NumberFormat.getInstance()方法返回NumberFormat的一个实例(实际上是NumberFormat具体的一个子类,例如DecimalFormat), 这适合根据本地设置格式化一个数字。可以使用非缺省的地区设置,例如德国。然后格式化方法根据特定的地区规则格式化数字。
NumberFormat nf =NumberFormat.getInstance(Locale.CHINA);
nf.format(1234567.12345)
如果将这个值输出,则为123,456.123,默认四舍五入保留三位小数。显然这种方法不好用且有一定的缺陷。
2-2.使用DecimalFormat
DecimalFormat是一个具体类,用法和SimpleDateFormat相似,通过其构造方法实例化,并给出想要的格式。
2-2-1.格式化数字
DecimalFormat df0 = new DecimalFormat();
System.out.println(df0.format(123456));
因为本地是中国,则输出为123,456,可以设置不同的国家,来得到相应的格式。
Locale.setDefault(Locale.GERMAN);
DecimalFormat df0 = new DecimalFormat();
System.out.println(df0.format(123456));
设置为德国风格,则输出为123.456。(中国的为一撇,德国的为一点)
2-2-2.数字精度
DecimalFormat df1 = new DecimalFormat(".000");
System.out.println(df1.format(1234.56));
输出为1234.560。也可以使用像"####.000"的符号。这个模式意味着在小数点前有四个数字,如果不够就空着,小数点后有三位数字,不足用0补齐。
DecimalFormat df0 = new DecimalFormat();
DecimalFormat df1 = new DecimalFormat(".00");
String i = df1.format(123456.12345);
System.out.println(i);
System.out.println(df0.format(Double.parseDouble(i)));
输出分别为:123456.12
123,456.12
2-2-3.科学计数法
DecimalFormat df = new DecimalFormat("0.00E0");
System.out.println(df.format(1234000000000000.56));
输出为:1.23E15。
NumberFormat nf = NumberFormat.getPercentInstance();
System.out.println(nf.format(0.45022));
输出为:45%。
NumberFormat nf = NumberFormat.getPercentInstance();
nf.setMinimumFractionDigits(2);
System.out.println(nf.format(0.45022));
输出为:45.02%。