Java常用类Calendar,System,Date,
一,System类常用成员方法: 
 (1)public static void gc() 
 运行垃圾回收器,运行垃圾回收器会自动调用Object中的finalize()方法回收不用的对象。
p=null; 
 System.gc();//p此时会被回收
(2)public static void exit(int status) 
 终止当前正在运行的java虚拟机。参数用作状态码,非0表示异常终止。 
 用于强制退出程序,可结束死循环。
(3)public static long currentTimeMillis() 
 返回当前的时间毫秒值 
 可用于计算一个应用程序运行的时间差毫秒数。 
 例如:计算冒泡排序所花费的时间 
 long start=System.currentTimeMillis(); 
 bubbleSort(array);//冒泡排序 
 long end=System.currentTimeMillis(); 
 long time=end-start;//冒泡排序所花时间
(4)public static void arraycopy(Object src,int srcPos,Object dest, int destPos,int length) 
 指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
二,Calendar日历类 
 Calender为抽象类 
 public static final int YEAR:表示日历中 的年 
 public static final int MONTH:月份:是0开始计算的 
 public static final int DATE:和DAY_OF_MONTH是同义词,表示月份中的某天。
应用一:获取当前的年月日
(1)获取当前的年月日
public void main(String[] args){
 //首先创建日历类对象,由于Calendar为抽象类,所以要通过getInstance()方法创建对象
 Calendar c1=Calendar.getInstance();
 int year=c1.get(Calendar.YEAR);//年
 int month=c1.get(Calendar.MONTH);//月
 int day=c1.get(Calendar.DATE);//日
 //输出
 System.out.println(year+"年"+(month+1)+"月"+date+"日");
} 
Calendar常用成员方法: 
 public abstract void add(int field,int amount) 
 为给定的日历字段添加或减去时间偏移量
public final void set(int year,int month,int date) 
 设置日历字段YEAR,MONTH和DAY_OF_MONTH的值 
 例如:c.set(2017,5,20) ;
应用二:求五年后的十天前
//需求:5年后的十天前
        c.add(Calendar.YEAR, 5) ;
        c.add(Calendar.DATE, -10) ;
        //获取年
        year = c.get(Calendar.YEAR) ;
        //获取月
        month = c.get(Calendar.MONTH) ;
        //月汇总的天
        date = c.get(Calendar.DATE) ;
        System.out.println(year+"年"+(month+1)+"月"+date+"日");
 
应用三:获取任意一年的二月有多少天?
import java.util.Calendar;
import java.util.Scanner;
public class calendar1 {
/**
 * 获取任意一年的二月有多少天?
 * @param args
 */
    public static void main(String[] args) {
       //任意一年:由用户从键盘录入一个年份
       System.out.println("请输入年份:");
        Scanner sc=new Scanner(System.in);
        int year=sc.nextInt();
        //创建一个日历类对象,
        Calendar c1=Calendar.getInstance();
        //设置日期为3月1日,c1.set(year,2,1)从而推导出2月的最后一天
        c1.set(year,2,1);
        //将日期往前推一天
        c1.add(Calendar.DATE, -1);
        //获取当前日历对象的天数
        int day=c1.get(Calendar.DATE);
        //输出
        System.out.println(year+"年的2月有"+day+"天");
    }
}
//输入:2017
//输出:2017年的2月有28天 
三,Date类
import java.util.Date;
public class Date1 {
/**
 * Date类:日期类
表示特定的时间,精确到毫秒。
常用的构造方式:
public Date():表示分配的一个Date对象,获取当前系统的具体时间。
 * @param args
 */
    public static void main(String[] args) {
        //创建日期对象
        Date d1=new Date();
        System.out.println(d1);//Sat Nov 04 15:05:43    CST 2017 :获取当前系统的星期 月份 时分秒 年份
        long time=1000/60/60;//1000表示毫秒=1秒/60=0分钟=0/60=0小时
        Date d2=new Date(time);//d2:Thu Jan 01 08:00:00 CST 1970
        //public long getTime()获取当前时间毫秒值
        long time1=d1.getTime();
        System.out.println(time1);//1509969968285
        //getTime()与System.currentTimeMillis();相同都是获取当前时间的毫秒数。
        System.out.println(System.currentTimeMillis());//1509969968285
        //public void setTime(long time);//设置时间毫秒数,在Thu Jan 01 08:00:01 CST 1970基础上加上time毫秒
        d1.setTime(1000) ;
        System.out.println(d1);
        //Thu Jan 01 08:00:01 CST 1970          
    }
}
 
(1)将日期转换为文本格式 
 Date d1=new Date(); 
 SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd HH-mm-ss “);
String dateStr=sdf.fomat(d1); 
 System.out.println(dataStr);//2017-11-06 21:09:58 
 //或者这种年月日格式 
 SimpleDateFormat sdf1=new SimpleDateFormat(“yyyy年-MM月-dd日 HH-mm-ss”); 
 String DateStr1=format(d1); 
 System.out.println(DateStr1);//2017年11月06日 21:09:58
(2)将String型的日期转换为Date形式 
 例如: 
 String str2=”2017-11-06”; 
 //public SimpleDateFormat(String pattern)其中给定的日期模式要和给定的字符串形式一致,否则会出现java.text.ParseException异常 
 SimpleDateFormat sdf2=new SimpleDateFormat(“yyyy-MM-dd “); 
 SimpleDateFormat sdf3=new SimpleDateFormat(“yyyy年MM年dd天”); 
 //运行后出现转换异常java.text.ParseException异常 
 //用parse方法要在main方法中抛出parseExceptiion 
 Date d2=sdf2.parse(str2); 
 System.out.println(d2);//Mon Nov 06 00:00:00 CST 2017
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * /**
 * 将Date对象--->String类型的日期的"文本格式":格式化
 *      public final String format(Date date)
 * String类型日期的"文本格式"---->Date日期对象:解析
 *      public Date parse(String source) 该方法本身会抛出一个异常:ParseException(解析异常:编译时期异常)
 * 
 * 要进行转换:必须使用中间桥梁:DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。
 *  日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期Date -> 文本String)、解析(文本String-> 日期Date)和标准化
 * 
 *      但是,DateFormat是抽象类,不能直接实例化,使用的是它更具体的子类进行实例化:
 *      SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类
 * 
 *      常用的构造方法:
 *              Date---格式化--->String文本格式
 *              
 *              public SimpleDateFormat(String pattern)用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat
 * 
 *      日期和时间模式
 *          y           年   比如:2017---->yyyy
 *          M           年中的月份:2------>MM
 *          d           月份中的天数 :----->dd
 *          H           小时              HH
 *          m           小时中的分钟数     mm
 *          s           分钟中的秒数      ss
 * 
 *
 * @author Apple
 *
 */
public class Date2 {
    public static void main(String[] args) throws ParseException {
        //Date日期对象--->格式化---->String:日期文本格式
        //创建日期对象
        Date d = new Date() ;
//      System.out.println(d);
        //创建SimpleDateFormat类对象,用该对象格式化Date对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat sdf1=new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
        //格式化
        //public final String format(Date date)
        String dateStr = sdf.format(d);
        System.out.println("dateStr:"+dateStr);
        String dateStr1=sdf1.format(d);
        System.out.println("dateStr1:"+dateStr1);
        System.out.println("------------------------------------");
        //String日期"文本格式"----->解析----->Date对象
        /**
         * 注意事项:
         *      一定要保证SimpleDateFormat中的String Pattern这个模式和当前给的字符串的文本格式的模式必须一致!
         */
        String s = "2017-11-06" ;
        //创建SimpleDateFormat类的对象,用该对象解析String的日期的"文本格式"
        //SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日") ;
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd") ;
        //java.text.ParseException: Unparseable date: "2017-12-30"
        //开始解析
        //public Date parse(String source)
        Date d2 = sdf2.parse(s);
        System.out.println("d2:"+d2);
    }
}
/**
         * dateStr:2017-11-06 21:53:55
           dateStr1:2017年11月06日  21:53:55
           ------------------------------------
           d2:Mon Nov 06 00:00:00 CST 2017
         */ 
创建一个date类和String相互转换的工具类
package Date;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;
/**
 * 这是将date和String相互转换的工具类
 * @author 花花
 * @version 1.0
 */
public class DateUtil {
    /**
     * 该方法将给定的日期转换为指定的文本格式
     * @param format
     * 指定的文本格式
     * @param d
     * 需要被转换的Date对象
     * @return
     * 返回日期所对应的文本格式
     */
    public static String dateToString(Date d,String format) {
        return new SimpleDateFormat(format).format(d);  
    }
    /**
     * 该方法将给定的日期的文本格式解析成为一个Date日期对象
     * @param dateString
     * 表示需要被解析的日期文本格式
     * @param format
     * 表示解析日期文本格式时需要使用的一种模式,此模式需与被解析的日期文本格式
     * @return
     * 返回Date日期对象
     * @throws ParseException
     * 抛出解析异常
     */
    public static Date stringToDate(String dateString,String format)throws ParseException{
        return new SimpleDateFormat(format).parse(dateString);  
    }
} 
package Date;
import java.util.Scanner;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.ParseException;
/**
 * 键盘录入你的出生年月日,计算你来到这个世界有多少天了?
 * 
 * 分析:
 *      1)键盘键盘录入出生年月日,录入这一个String类型的数据
 *      2)创建SimpleDateFormat对象指定一种模式
 *      3)将当前String日期文本格式转换成date对象
 *      4)通过Date对象获取getTime():获取时间毫秒值
 *      5)得到当前系统时间的毫秒值(System.currentTimeMillis)
 *      6):5)-4)=long 类型的时间
 *      7)换算成多少天
 *      8)输出
 * @author Apple
 */
public class MyYearOldTest {
    public static void main(String[] args) throws ParseException{
        System.out.println("请输入您的出生日期(年-月-日):");
        Scanner sc=new Scanner(System.in);
        String birthday=sc.nextLine();
        String dateformat="yyyy-MM-dd"; 
        Date d=DateUtil.stringToDate(birthday, dateformat);
        long oldTime=d.getTime();
        long newTime=System.currentTimeMillis();
        long time=newTime-oldTime;
        long days=time/1000/60/60/24;
        System.out.println("您已经来到这个世界"+days+"天了!");
    }
}
 
BigInteger类,BigDecimal类
package bigData;
import java.math.BigDecimal;
import java.math.BigInteger;
public class BigData {
    public static void main(String[] args) {
        // 查看Integer类的最大值
        System.out.println(Integer.MAX_VALUE);// 2147483647
        // 创建Integer对象
        // Integer i = new Integer("2147483648") ;// java.lang.NumberFormatException:
        // For input string: "2147483648"
        // 当前该数据已经超出了Integer的取值范围
        // System.out.println(i);
        BigInteger i = new BigInteger("2147483648");
        /**
         * BigInteger的构造方法 public BigInteger(String val)将字符串表示的数字封装成BigInteger类型 成员方法:
         * public BigInteger add(BigInteger val) public BigInteger subtract(BigInteger
         * val) public BigInteger multiply(BigInteger val) public BigInteger
         * divide(BigInteger val) public BigInteger[] divideAndRemainder(BigInteger val)
         * 返回一个BigInteger数组,数组中的元素:商,余数
         * 
         * @author Apple
         */
        // 创建BigInteger对象
        BigInteger bg1 = new BigInteger("100");
        BigInteger bg2 = new BigInteger("50");
        // public BigInteger add(BigInteger val)
        System.out.println("add:" + bg1.add(bg2));
        // public BigInteger subtract(BigInteger val)
        System.out.println("sub:" + bg1.subtract(bg2));
        // public BigInteger multiply(BigInteger val)
        System.out.println("mul:" + bg1.multiply(bg2));
        // public BigInteger divide(BigInteger val)
        System.out.println("div:" + bg1.divide(bg2));
        BigInteger[] datas = bg1.divideAndRemainder(bg2);
        System.out.println("datas[0]:" + datas[0]);// 2
        System.out.println("datas[1]:" + datas[1]);// 0
        System.out.println("-------------------------");
        /**
         * 对于浮点类型的数据类说,他们存储和整数的存储是不一致的,是按照有效数字位来进行存储的,浮点类型的数据计算的时候
         * 容易损失精度,计算出来的结果不精确,Java针对这种情况:提供了这个 BigDecimal:
         * 作用:来提供浮点类型数据的精确计算!可变的、任意精度的有符号十进制数 构造方式: public BigDecimal(String val)
         * 
         * @author Apple
         */
        System.out.println("i:" + i);
        System.out.println(1.0 - 0.32);
        System.out.println(0.01 + 0.09);
        System.out.println(1.501 * 100);
        System.out.println(1.031 / 100);
        /**
         * public BigDecimal(String val) 常用的成员方法; public BigDecimal add(BigDecimal
         * augend):加 public BigDecimal subtract(BigDecimal subtrahend):减 public
         * BigDecimal multiply(BigDecimal multiplicand):乘法 public BigDecimal
         * divide(BigDecimal divisor):除 public BigDecimal divide(BigDecimal divisor,int
         * scale,int roundingMode) 参数1:商, 参数2:保留几位小数,参数3:舍入的一种模式:ROUND_HALF_UP
         * 
         * @author Apple
         */
        // 创建BigDecimal对象
        BigDecimal bd1 = new BigDecimal("0.01");
        BigDecimal bd2 = new BigDecimal("0.09");
        // public BigDecimal add(BigDecimal augend):加
        System.out.println("add:" + bd1.add(bd2));
        BigDecimal bd3 = new BigDecimal("1.0");
        BigDecimal bd4 = new BigDecimal("0.32");
        // public BigDecimal subtract(BigDecimal subtrahend):减
        System.out.println("sub:" + bd3.subtract(bd4));// 0.68
        // public BigDecimal multiply(BigDecimal multiplicand):乘法
        BigDecimal bd5 = new BigDecimal("1.501");
        BigDecimal bd6 = new BigDecimal("100.0");
        System.out.println("mul:" + bd5.multiply(bd6));
        // public BigDecimal divide(BigDecimal divisor):除
        BigDecimal bd7 = new BigDecimal("1.301");
        BigDecimal bd8 = new BigDecimal("100");
        System.out.println("div:" + bd7.divide(bd8));
        // public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)
        // * 参数1:商, 参数2:保留几位小数,参数3:舍入的一种模式:ROUND_HALF_UP
        System.out.println("div:" + bd7.divide(bd8, 3, BigDecimal.ROUND_HALF_UP));
        System.out.println("div:" + bd7.divide(bd8, 8, BigDecimal.ROUND_HALF_UP));
    }
}
 

                
            
        
浙公网安备 33010602011771号