0
点赞
收藏
分享

微信扫一扫

【达内课程】Math、DecimalFormat、Date、SimpleDateFormat 方法使用


文章目录

  • ​​java.lang.Math​​
  • ​​java.text.DecimalFormat​​
  • ​​java.util.Date​​
  • ​​java.text.SimpleDateFormat​​

java.lang.Math

Math 类位于 Java.lang 包中,包含用于执行基本数学运算的方法。Math 类的所有执行方法都是静态方法,可以直接使用 类名.方法 名调用,如:Math.round();

Math 中常用方法:

Math.PI; π
Math.E; 自然对数
Math.sqrt(); 开方运算
Math.random(); 0.0-1.0的随机double值
Math.pow(a,b); a的b次幂的值
Math.max(a,b); 返回a、b中较大的一个值
Math.min(a,b); 返回a、b中较小的一个值
Math.sin(); 返回角的三角正弦
Math.cos(); 返回角的三角余弦
Math.tan(); 返回角的三角正切
Math.floor(a); 向下取整
Math.ceil(a); 向上取整
Math.round(a); 返回四舍五入后的整数

java.text.DecimalFormat

DecimalFormat 主要的作用是用来格式化数字。DecimalFormat 类主要靠 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。通过下边的例子你应该可以明白。

举例:DecimalFormat 使用练习

DecimalFormat df1 = new DecimalFormat("0.0");
DecimalFormat df2 = new DecimalFormat("#.#");
DecimalFormat df3 = new DecimalFormat("000.000");
DecimalFormat df4 = new DecimalFormat("###.###");
System.out.println(df1.format(12.34));//12.3
System.out.println(df2.format(12.34));//12.3
System.out.println(df3.format(12.34));//012.340
System.out.println(df4.format(12.34));//12.34

DecimalFormat 中的符号含义

符号

位置

本地化?

含义

​0​

数字


阿拉伯数字

​#​

数字字


阿拉伯数字,如果不存在则显示为空

​.​

数字


小数分隔符或货币小数分隔符

​-​

数字


减号

​,​

数字


分组分隔符

​E​

数字


分隔科学计数法中的尾数和指数。在前缀或后缀中无需加引号。

​;​

子模式边界


分隔正数和负数子模式

​%​

前缀或后缀


乘以 100 并显示为百分数

​/u2030​

前缀或后缀


乘以 1000 并显示为千分数

​¤​​​(​​/u00A4​​)

前缀或后缀


货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符。

​'​

前缀或后缀


用于在前缀或或后缀中为特殊字符加引号,例如 ​​"'#'#"​​​ 将 123 格式化为 ​​"#123"​​​。要创建单引号本身,请连续使用两个单引号:​​"# o''clock"​​。

举例:格式化价格

double d = 27613872.1873;
DecimalFormat df = new DecimalFormat("\u00A4###,###.000");
String s = df.format(d);
System.out.println(s);//¥27,613,872.187

对代码的解释。
1、首先进行 DecimalFormat 的创建 ​​​DecimalFormat f = new DecimalFormat(格式);​​​ 2、其中的格式我们想展示为金钱符号开头,每隔三位加一个逗号,保留三位小数:​​¥###,###.000​​,表中信息得知 /u00A4 为金钱符号,用 # 和 , 来实现每隔 3 位分组,末尾的 000 表示超出 3 位会四舍五入成 3 位,不足 3 位补 0。
3、最后调用 DecimalFormat 的 format 方法将数字格式化字符串

举例:DecimalFormat 综合练习

double pi = 3.1415927;
//取一位整数
System.out.println(new DecimalFormat("0").format(pi));//3
//取一位整数和两位小数
System.out.println(new DecimalFormat("0.00").format(pi)); //3.14
//取两位整数和三位小数,整数不足部分以0填补。
System.out.println(new DecimalFormat("00.000").format(pi));// 03.142
//取所有整数部分
System.out.println(new DecimalFormat("#").format(pi));//3
//以百分比方式计数,并取两位小数
System.out.println(new DecimalFormat("#.##%").format(pi));//314.16%

举例:对光速进行格式化

long c = 299792458;//光速
//显示为科学计数法,并取五位小数
System.out.println(new DecimalFormat("#.#####E0").format(c));//2.99792E8
//显示为两位整数的科学计数法,并取四位小数
System.out.println(new DecimalFormat("00.####E0").format(c));//29.9792E7
//每三位以逗号进行分隔。
System.out.println(new DecimalFormat(",###").format(c));//299,792,458
//将格式嵌入文本:光速大小为每秒299,792,458米
System.out.println(new DecimalFormat("光速大小为每秒,###米。").format(c));

方法
​​​applyPattern(格式)​​:修改执行的格式。可以用最开始的例子来说明,这个方法只不过是把添加格式没有放在创建对象时,而是放到了后边。

DecimalFormat df = new DecimalFormat();
df.applyPattern("0.0");
String output = df.format(12.34);
System.out.println(output);//12.3

​parse(字符串)​​:字符串解析成数字,返回Number类型对象(可能是8种类型中一种)不常用,自行百度。

java.util.Date

java.util 包提供了 Date 类来封装当前的日期和时间。封装一个毫秒值(毫秒值:1970-1-1 0点开始的毫秒值)

创建对象

创建对象有两种方法

1、第一种方法:封装当前时间的毫秒值,可以用来获取当前日期

Date date = new Date();
System.out.println(date);

//Thu Aug 26 09:38:37 CST 2021

2、第二种方法:封装指定的毫秒值,可以时间戳值转日期

long time = System.currentTimeMillis();
Date date = new Date(time);
System.out.println(date);

​currentTimeMillis()​​这个方法得到的是自1970年1月1日零点到目前计算这一刻所经历的的毫秒数,所以我们输出的结果也是现在。

也可以初始化 Date 后,再用 setTime 方法,所以等同于:

long time = System.currentTimeMillis();
Date date = new Date();
date.setTime(time);
System.out.println(date);

方法

序号

方法和描述

1

boolean after(Date date)

若当调用此方法的Date对象在指定日期之后返回true,否则返回false。

2

boolean before(Date date)

若当调用此方法的Date对象在指定日期之前返回true,否则返回false。

3

Object clone( )

返回此对象的副本。

4

int compareTo(Date date)

比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。

5

int compareTo(Object obj)

若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。

6

boolean equals(Object date)

当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。

7

long getTime( )

返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

8

int hashCode( )

 返回此对象的哈希码值。

9

void setTime(long time)

 

用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。

10

String toString( )

把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。

举例:日期转毫秒值(获取当前时间戳)

Date date = new Date();
System.out.println(date.getTime());

1629942256523

举例:日期比较

Date date1 = new Date(1000);
Date date2 = new Date(2000);
System.out.println(date1.before(date2));true
System.out.println(date1.after(date2));false
System.out.println(date1.compareTo(date2));-1

java.text.SimpleDateFormat

SimpleDateFormat 的作用是将 日期/时间格式 转换为预先定义的 日期/时间格式,即
Date对象–>日期格式字符串
日期格式字符串–>Date对象

使用方法很简单,通过几个例子来看一下。

举例:SimpleDateFormat 使用练习

Date d1 = new Date();
Date d2 = new Date(700000000000L);
/*
* println()方法
* 获得一个对象,
* 回调用对象的toString()方法
* 获得字符串,再打印
*/
System.out.println(d1);输出:Thu Aug 26 10:37:24 CST 2021
System.out.println(d2);输出:Sun Mar 08 04:26:40 CST 1992
System.out.println(d1.getTime());输出:1629945444689
System.out.println(d2.getTime());输出:700000000000

d1.setTime(0);//格林尼治时间0点。北京时间8点
System.out.println(d1);输出:Thu Jan 01 08:00:00 CST 1970

SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(fmt.format(d1));输出:1970-01-01 08:00:00
System.out.println(fmt.format(d2));输出:1992-03-08 04:26:40

这个例子中我们对 Date 又进行了一些练习,但这里主要对 SimpleDateFormat 的使用做说明。

在使用 SimpleDateFormat 时需要指定一个需要的格式 (pattern) 来格式日期 (Date)。我们定义了格式:​​yyyy-MM-dd HH:mm:ss​

格式说明

yyyy 年,1992
MM 月,例如 3 月显示为 03
dd, 代表日 (只能使用小写)
HH,代表时, 24小时制
hh ,代表时,12小时制
mm,代表分(只能使用小写)
ss,代表秒(只能使用小写)
E,代表星期(只能使用大写)
a,代表上午还是下午,上午"AM" , 下午"PM"

以上是我们常用的格式说明,更加具体的可以查看 ​​官方 API​​

方法
​​​format(对象)​​:Date对象格式化成字符串

​parse(字符串)​​:字符串解析成Date对象

​applyPattern(格式)​​:修改使用的格式

举例:获取生存天数

System.out.println("输入生日(yyyy-MM-dd):");
String s = new Scanner(System.in).nextLine();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = null;
try {
d = sdf.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}

long t = System.currentTimeMillis() - d.getTime();
t = t / 1000 / 60 / 60 / 24;

System.out.println("您已经生存了" + t + "天");

运行结果:

输入生日(yyyy-MM-dd):
1992-03-14
您已经生存了10757天

举例:获取任意时间的时间戳

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
Date date = null;
try {
date = sdf.parse("2022-01-01");
System.out.println(date.getTime());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

运行结果

1640966460000

参考
​​​SimpleDateFormat日期格式(浅面)​​

举报

相关推荐

0 条评论