二,Date
–1,概述
对于日期进行各种操作
–2,创建对象
Date()
分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
–3,常用方法
int getDate()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_MONTH) 取代。
int getDay()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_WEEK) 取代。
int getHours()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.HOUR_OF_DAY) 取代。
int getMinutes()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MINUTE) 取代。
int getMonth()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MONTH) 取代。
int getSeconds()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.SECOND) 取代。
long getTime()
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
int getTimezoneOffset()
已过时。 从 JDK 1.1 开始,由 -(Calendar.get(Calendar.ZONE_OFFSET) + Calendar.get(Calendar.DST_OFFSET)) / (60 * 1000) 取代。
int getYear()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.YEAR) - 1900 取代。
--4,测试
package cn.tedu.api;
import java.util.Date;
//测试 日期工具类
public class Test2_Date {
public static void main(String[] args) {
//1,创建Date对象
Date date = new Date();
//TODO 2,调用方法
System.out.println( date.getDate() );//今天是多少号
System.out.println( date.getDay() );//今天是星期几
System.out.println( date.getHours() );//现在是几点
System.out.println( date.getMinutes() );//现在是多少分钟
System.out.println( date.getMonth() );//TODO 现在是几月????
System.out.println( date.getSeconds() );//现在是多少秒
System.out.println( date.getTime() );//从1970.1.1 零点到现在的毫秒值
System.out.println( date.getYear() );//从1900年到现在是多少年
System.out.println( date.toLocaleString() );//2020-8-15 11:53:50
}
}
三,日期工具SimpleDateFormat
–1,概述
专门用来把日期数据进行转化.把 String类型的日期 和 Date类型的日期 互转
–2,创建对象
SimpleDateFormat(String pattern)
用给定的模式和默认语言环境的日期格式符号构造
–3,常用方法
String format(Date date)
将给定的 Date 格式化为日期/时间字符串,变成String。
Date parse(String text)
解析字符串的文本,生成 Date。
–4,测试
package cn.tedu.api;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
//测试 日期格式化的工具类SimpleDateFormat – Date<->String
public class Test3_SimpleDF {
public static void main(String[] args) throws Exception {
//1,创建对象–参数是日期的格式 年y-月M-日d 月/日/年
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
//2,常用方法
// Date date = new Date();
// String str = sdf.format(date) ;
String str = sdf.format(new Date());//Date->String
System.out.println(str);//2020-08-15
Date d = sdf.parse(“2020-08-15”);//String->Date
System.out.println(d.getMonth());
//3,计算存活天数
//接收输入的出生日期
String birthday = new Scanner(System.in).nextLine();
//String->Date
Date birth = sdf.parse(birthday);
//计算天数
long start = birth.getTime() ;//出生日期 对应的毫秒值
long now = System.currentTimeMillis() ;//当前时间的毫秒值
System.out.println( (now-start)/1000/60/60/24 );//ms->天
}
}
四,BigDecimal/BigInteger
–1,概述
–BigDecimal专门用来解决 浮点数运算不精确的问题
–BigInteger专门用来解决 大型的整数运算
–2,BigDecimal创建对象
BigDecimal(double val)
将 double 转换为 BigDecimal,后者是 double 的二进制浮点值准确的十进制表示形式。
BigDecimal(String val)
将 BigDecimal 的字符串表示形式转换为 BigDecimal。
–3,常用方法
加法: BigDecimal add(BigDecimal augend)
减法: BigDecimal subtract(BigDecimal subtrahend)
乘法: BigDecimal multiply(BigDecimal multiplicand)
除法: BigDecimal divide(BigDecimal divisor)
–4,测试
package cn.tedu.api;
import java.math.BigDecimal;
import java.util.Scanner;
//测试 小数运算精确的解决方案
public class Test4_BigDecimal {
public static void main(String[] args) {
// method();//暴露问题
method2();//解决方案
}
public static void method2() {
//接收输入的两个小数
double a = new Scanner(System.in).nextDouble();
double b = new Scanner(System.in).nextDouble();
//创建对象
//含参构造BigDecimal(double val)--有坑
// BigDecimal bd1 = new BigDecimal(a);
// BigDecimal bd2 = new BigDecimal(b);
//触发含参构造BigDecimal(String val) -- 推荐
BigDecimal bd1 = new BigDecimal( String.valueOf(a) );//double->String
BigDecimal bd2 = new BigDecimal(b+"");//double->String
BigDecimal bd3 = bd1.add(bd2);//加法
System.out.println(bd3);
bd3 = bd1.subtract(bd2);//减法
System.out.println(bd3);
bd3 = bd1.multiply(bd2);//乘法
System.out.println(bd3);
//除法--除不尽时--java.lang.ArithmeticException
// bd3 = bd1.divide(bd2);
//重载的divide(x,y,z)-x是要参与运算的对象名称,y是保留的小数位数,z是舍入模式
bd3 = bd1.divide(bd2,5,BigDecimal.ROUND_HALF_UP);
System.out.println(bd3);
}
//暴露问题
public static void method() {
//接收输入的两个小数
double a = new Scanner(System.in).nextDouble();
double b = new Scanner(System.in).nextDouble();
//做运算
System.out.println(a+b);//不精确
System.out.println(a-b);//不精确
System.out.println(a*b);//不精确
System.out.println(a/b);//不精确
}
}