Java数据格式化问题

1.时间类型格式化


1-1.Date(日期)

        Date类是一个非抽象类,也就是具体类,那么就可以将其实例化,实例化会使用系统的当前日期和时间创建一个日期对象,这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间,通过Date类的get方法可以拿到我们想要的具体数据,也可以通过set方法来设置特定的时间和日期。要注意的是通过get方法拿到的某些值是与1999年01月01日0时0分的相对值。比如现在如果是2016年,那么下图代码的输出为116。

图(1)

        我们可以发现这个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)

         图(2)year和month的值为2015和5(6月)。

1-3.DateFormat(日期格式)

        DateFormat类也是一个抽象类,通常使用其具体子类SimpleDateFormat来对日期类型(Date类型)进行格式化,使用其构造方法实例化一个SimpleDateFormat,并给出想要的格式就可以对Date类型进行格式化了。

图(3)

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%。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容