Math常用类Date类Calendar类两者相互转换

Posted gfl-1112

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

 

以上是关于Math常用类Date类Calendar类两者相互转换的主要内容,如果未能解决你的问题,请参考以下文章

常用工具类(System,Runtime,Date,Calendar,Math)

Java 中常用的类:包括基本类型的包装类Date 类SimpleDateFormat 类 Calendar 类 Math 类

JavaSE核心之一:Date类Calendar类Math类枚举;

使用 Date 和 SimpleDateFormat 类表示时间Calendar类和Math类

工具类System,Runtime,Math,Date,Calendar

DateDateFormat类Calendar类基本类型包装类System类Math类Arrays类大数据运算类