Math常用类、Date类、Calendar类、两者相互转换
Math类:用于执行数学计算
PI属性,获取圆周率
random():获得一个0-1之间的随机浮点
floor():向下取整
ceile():向上取整
round():四舍五入
max():最大值
min():最小值
power():获得幂次方
方法可直接在main方法中调用,因为源码写的是static
没有static的修饰的称为实例方法,只有在实例化后才能调用
static是常驻内存,又称为类方法,static只会用于常用类和变量,使用static修饰的数据直接通过“类名.方法名”进行调用,常驻内存的静态方法垃圾回收机制是不会对其进行删除的
例子:
public static void main(System[] args){ //取最大值 int max=Math.max(1,5); //5 //去最小值 int min=Math.min(1,5); //1 //生成随机数0-1 int n=Math.random(); //生成0-9的随机数,对0.0001-9.9999的数进行取整,丢失精度后为0-9 int n=(int)Math.random()*10; //生成1-6的随机数 int n=((int)Math.random()*6)+1; //向下取整 int n=Math.floor(10.5); //10 //向上取整 int n=Math.ceil(10.5); //11 //四舍五入 int n=Math.round(10.5); //11 //幂次方:第一个参数是底数,第二个数是幂数 int n=Math.power(2,3); //8 //平方根 int n=Math.sqrt(16); //4 }
BigDecimal:保留几位小数点
在java.math包中,使用要导包,用于封装处理所有的数值类数据并提供数据见的转换功能
setScale(参数1,参数2)
参数2的类型可填:
ROUND_HALF_UP表示四舍五入
ROUND_CEILLING表示向上取整
ROUND_FLOOR表示向下取整
BigDecimal 是类,能对数据处理,但是不能参与计算
BigDecimal bd=new BigDecamal(10.1256); //能够转为任意类型 int n1=bd.intValue(); //10 double n2=bd.doubleValue(); //10.1256 //对数据进行精度处理 //参数1表示保留的浮点数,参数2表示精度保留的处理模式 //ROUND_HALF_UP表示四舍五入 //ROUND_CEILLING表示向上取整 //ROUND_FLOOR表示向下取整 bd=bd.setScale(2,BigDecimal.ROUND_HALF_UP); //10.13
Date类和Calendar类:
1.两个类型都能描述日期和时间
2.Date主要用于描述时间
3.Calendar主要用于对日期进行访问操作
4.两者可相互转换(通过毫秒值进行转换)
public static void main(System[] args){ //创建Date对象,就是获取当前系统时间 Date date=new Date(); //也可以通过毫秒值创建一个Date对象 Date date=new Date(47285628364923); //print方法打印时,隐式调用对象的toString方法,所以打印的是对象地址:写不写toString得到的结果是一样的 System.out.println(date.toString); System.out.println(date); //获取1970年至当前时间经历的毫秒值 long dateTime=date.getTime(); }
打印日期的时候默认打印的是对象的地址
改变格式打印两种方法:(也是将日期转为字符串的方法)
1.date.toLocalString();
2.SimpleDateFormat类:可将日期按指定格式进行呈现
创建类:SimpleDateFormat sdf=new SimpleDateFormat(String patten1);
使用类:sdf.format(date);
重新应用新的格式规则:sdf.applyPatten(String patten2);
可以通过应用新格式的方式获取单独的时间单位:sdf.applyPatten("MM");
//创建新的日期 Date date=new Date(); //直接打印的是字符串:Wed Apr 29 17:15:56 CST 2020 System.out.println(date);
//改成系统默认的规则进行打印:2020-4-29 17:15:56 System.out.println(date.toLocaleString());
//创建日期格式化类:使日期改成yyyy-MM-dd HH-mm-ss类型 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); //使用格式化类型 String strDate=sdf.format(date); //结果:2020-04-29 17-15-56 System.out.println(strDate);
//创建应用新的格式 sdf.applyPattern("yyyy年MM月dd日"); //使用格式 String strDate2=sdf.format(date); //结果:2020年04月29日 System.out.println(strDate2);
//获取单独的月份 sdf.applyPattern("MM"); //使用获取格式 String strDate3=sdf.format(date); //结果:04 System.out.println(strDate3);
将字符串转为日期的方法:
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd") ; //输入的日期字符串一定要和规定的类型一致才能转换 String strDate="2020-4-29"; try {
//转换类型 Date date=sdf.parse(strDate); System.out.println(date); } catch (ParseException e) { e.printStackTrace(); }
Calendar:日历类
创建日历类就是通过Calendar获取当前系统时间(通过静态方法获得实例):Calendar cal=Calendar.getInstance();
默认打印出的cal是系统默认的字符串:
java.util.GregorianCalendar[time=1588152735940,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=3,WEEK_OF_YEAR=18,WEEK_OF_MONTH=5,DAY_OF_MONTH=29,DAY_OF_YEAR=120,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=5,AM_PM=1,HOUR=5,HOUR_OF_DAY=17,MINUTE=32,SECOND=15,MILLISECOND=940,ZONE_OFFSET=28800000,DST_OFFSET=0]
如果需要按照给定的格式进行打印,则需要是Date格式,所以要转换格式:
将Calendar转换为Date格式:
方法一:获取1970年到现在的毫秒值,通过毫秒值封装成为Date类型
方法二:用Date接收用SimpleDateFormat对日期进行格式化
//创建日历类 Calendar cal=Calendar.getInstance(); //直接打印就是一长串字符串 System.out.println(cal);
/****************转换方式一********************/ //获取1970年到cal指定的日期的毫秒值 long timemillis=cal.getTimeInMillis(); //通过毫秒值封装一个Date类型 Date date=new Date(timemillis);
/***************转换方式二*********************/ //用日期类接收日历类的时间 Date date1=cal.getTime(); //结果:Wed Apr 29 18:07:41 CST 2020 System.out.println(date1); //指定格式 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strDate=sdf.format(date1); //结果:2020-04-29 18:11:01 System.out.println(strDate);
获取时间单位:
//创建日历类 Calendar cal=Calendar.getInstance(); //获取时间单位:参数是feild都可输入静态属性 //获取年份 int year=cal.get(Calendar.YEAR); //结果2020 System.out.println(year); //获取月份 int month=cal.get(Calendar.MONTH); //结果是3(不是4) System.out.println(month); //获得24小时 int HH=cal.get(Calendar.HOUR_OF_DAY); //结果18 System.out.println(HH); //获得12小时 int hh=cal.get(Calendar.HOUR); //结果6 System.out.println(hh);
设置时间:
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); //创建日历类 Calendar cal=Calendar.getInstance(); //set(int feild,int value):单独修改年、月、日 cal.set(Calendar.YEAR,2019); //将cal转换成Date类型 Date date=cal.getTime(); String strDate=sdf.format(date); //结果:2019-4-29 System.out.println(strDate); //set(int year,int month,int day):同时修改年月日 cal.set(2019,1,1); //将cal转换成Date类型 Date date1=cal.getTime(); String strDate1=sdf.format(date1); //结果2019-2-1(不是2019-1-1) System.out.println(strDate1);
对时间进行计算更改:
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//创建日历类 Calendar cal=Calendar.getInstance(); //将原始cal转换成Date类型进行打印 Date date0=cal.getTime(); String strDate0=sdf.format(date0); //原始结果是:2020-04-29 18:41:16 System.out.println(strDate0); //修改天-7 cal.add(Calendar.DATE,-7); //将cal转换成Date类型进行打印 Date date=cal.getTime(); String strDate=sdf.format(date); //结果是:2020-04-22 18:41:16 System.out.println(strDate); //修改小时+3 cal.add(Calendar.HOUR,3); //将cal转换成Date类型进行打印 Date date1=cal.getTime(); String strDate1=sdf.format(date1); //结果是:2020-04-22 21:41:16 System.out.println(strDate1); //修改月份+10 cal.add(Calendar.MONTH,10); //将cal转换成Date类型进行打印 Date date2= cal.getTime(); String strDate2=sdf.format(date2); //结果是:2021-02-22 21:41:16 System.out.println(strDate2);
对时间进行比较:
方法一:通过 时间1.before(时间2) 进行比较
方法二:通过 时间1.compareTo(时间2) 进行比较
//创建时间1 Calendar cal=Calendar.getInstance(); cal.set(2020,3,5); //创建时间2 Calendar cal2=Calendar.getInstance(); if(cal.before(cal2)){ System.out.println("第一个时间早于第二个时间"); } else{ System.out.println("第一个时间晚于第二个时间"); }
//创建时间1 Calendar cal=Calendar.getInstance(); cal.set(2020,3,5); //创建时间2 Calendar cal2=Calendar.getInstance(); //返回int值,1表示晚于参数,-1表示早于参数,0表示时间相同 System.out.println(cal.compareTo(cal2));
Calendar转换为Date:
//创建日历类 Calendar cal=Calendar.getInstance(); //通过获取日历类的毫秒值封装成Date Date date=new Date(cal.getTimeInMillis()); System.out.println(date);
Date转换为Calendar:
//创建日期类 Date date=new Date(); //创建日历类 Calendar cal=Calendar.getInstance(); //通过日期类设置日历类的值 cal.setTime(date); System.out.println(cal);