文章目录
- 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 中的符号含义
符号 | 位置 | 本地化? | 含义 |
| 数字 | 是 | 阿拉伯数字 |
| 数字字 | 是 | 阿拉伯数字,如果不存在则显示为空 |
| 数字 | 是 | 小数分隔符或货币小数分隔符 |
| 数字 | 是 | 减号 |
| 数字 | 是 | 分组分隔符 |
| 数字 | 是 | 分隔科学计数法中的尾数和指数。在前缀或后缀中无需加引号。 |
| 子模式边界 | 是 | 分隔正数和负数子模式 |
| 前缀或后缀 | 是 | 乘以 100 并显示为百分数 |
| 前缀或后缀 | 是 | 乘以 1000 并显示为千分数 |
| 前缀或后缀 | 否 | 货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符。 |
| 前缀或后缀 | 否 | 用于在前缀或或后缀中为特殊字符加引号,例如 |
举例:格式化价格
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日期格式(浅面)