【Java13】Date类/Calendar类,System类/Math类


1.Date类

package com.itheima02.date;
import java.util.Date;
/*
*   Date: 日期: 构造方法
*       1. Date() : 获取电脑系统当前时间
*       2. Date(long time) : 时间原点 + time (毫秒)
*          时间原点: 1970年1月1号 0时0分0秒 (unix 操作系统)(0经度线)
*          地理: 东八区 + 8个小时
*          普通方法:long getTime(); 获取当前时间-时间原点 (毫秒值)
*/
public class DateDemo {
    
    
    public static void main(String[] args) {
    
    
        Date date = new Date();
        //引用类型直接打印,理论打印地址值,但重写toString方法如上
        System.out.println(date); //Fri Sep 25 21:06:39 CST 2020
        
        //new Date(0) //Thu Jan 01 08:00:00 CST 1970 默认已经加了8小时  
        Date date1 = new Date(-1000); 
        System.out.println(date1); //Thu Jan 01 07:59:59 CST 1970 

        long time = date.getTime();
        System.out.println(time); //156.....秒
        System.out.println(time/1000/3600/24/365); //49年
    }                          //秒  小时  天  年
}
package com.itheima02.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
*   DateFormat : 日期格式化
*       1. 子类
*       SimpleDateFormat(String pattern) : 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
        模式字母: 让SimpleDateFormat知道 日期里的每个时间字段应该填充到模板哪个位置:y,M,d(个数不重要,自动填充)...
        2. 方法
          1. String format(Date date)  : 将一个 Date 格式化为日期/时间字符串。
          2. Date parse(String source)  : 从给定字符串的开始解析文本,以生成一个日期(上面的反向方法)
*/
public class DateFormatDemo {
    
    
    public static void main(String[] args) throws ParseException {
    
    
        Date date = new Date();
        System.out.println(date); //Fri Sep 25 21:15:31 CST 2020

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        String format = sdf.format(date); 
        System.out.println(format); //2020年09月25日 21时15分31秒

        String  msg = "1995-02-25";
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
        Date parse = sdf2.parse(msg);
        System.out.println(parse); // Sat Feb 25 00:00:00 CST 1995
    }
}
package com.itheima02.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
// 案例: 你活了多少天?公式: 当前时间 - 你出生时间  (转换成毫秒)
public class LiveDemo {
    
    
    public static void main(String[] args) throws ParseException {
    
    
        // 1. 当前时间
        Date date = new Date();
        long currentTime = date.getTime();

        // 2. 出生日期
        System.out.println("请输入你的生日(yyyy-MM-dd)");
        Scanner sc = new Scanner(System.in);
        String timeStr = sc.nextLine();
        
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date birthDate = sdf.parse(timeStr);//将字符串转换成Date
        long birthTime = birthDate.getTime();

        long liveDay = (currentTime - birthTime) / 1000 / 3600 / 24;
        System.out.println("恭喜你,活了" + liveDay + "天了");
    }
}

2.Calendar类

package com.itheima02.date;
import java.util.Calendar;
import java.util.Date;
/*
*   Calendar: 日历类(取代Date类)是抽象类,不能实例化
*       1. static Calendar getInstance()
          使用默认时区和语言环境获得一个日历。(包含系统当前时间),是复杂版的new Date()
          GregorianCalendar  格里高利历 (公历):  欧洲 罗马历(儒略历)。日本有自己历法
          问题: 直接去创建 GregorianCalendar子类 , 这个日历不适用日本这样的国家,代码不够国际化
          
        2. 方法
            1. int get(int field) :返回给定日历字段/属性field的值。
            2. void set(int field, int value) :将给定的日历字段设置为给定值。
            3. void add(int field, int amount) :根据日历的规则,为给定的日历字段添加或减去指定的时间量。
            4. Date getTime() :返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象
*/
public class CalendarDemo {
    
    
    public static void main(String[] args) {
    
    
//        method01();
//        get();
//        set();

        //只有子类对象才能向上转型 //.getInstance()是一个静态方法,源码里面肯定创建了子类对象
        //为什么这样设计?以前直接new子类对象,因为兼容日本等国
        Calendar c = Calendar.getInstance(); //这一行代码在中国电脑跑公历,在日本跑日本历
        System.out.println(c); //一大段字母:java.util.GregorianCalendar[...]    
                    
        c.add(Calendar.DAY_OF_MONTH,-30); 
        System.out.println(c);  //一大段字母:java.util.GregorianCalendar[...] 
   
        Date time = c.getTime(); //将日历转换为Date
        System.out.println(time); //Wed Aug 26 21:31:24 CST 2020
    }    
    private static void set() {
    
    
        //重置时间: 2008-08-08
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR,2008);
        c.set(Calendar.MONTH,7);
        c.set(Calendar.DAY_OF_MONTH,8);
        System.out.println(c);
    }    
    private static void get() {
    
    
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR); //2019,静态属性可用类名.调用
//        int year = c.get(1); //2019
        int month = c.get(Calendar.MONTH) + 1; //9 //几月
        int day = c.get(Calendar.DAY_OF_MONTH); //7 //几号
        System.out.println(year + "-" + month + "-" + day);
    }    
    private static void method01() {
    
    
        //Calendar c = Calendar子类对象 (向上转型)
        Calendar c = Calendar.getInstance();
        System.out.println(c);
    }
}

3.System类

package com.itheima03.system;
/*
*   System : 系统类很重要不让随便修改,java.lang.System。
*      1. System类用final修饰不能被继承【final修饰的类不能被继承但能new,如String】。
*      2. 因为构造方法是private,所以不能实例化。
*      3. 属性和方法全静态(灰色方片),外部才能访问 
*/
public class SystemDemo {
    
    
    public static void main(String[] args) {
    
     
       /* String s = new String("abc"); //一般String s = "abc"
        String uc = s.toUpperCase();
        int length = uc.length();
        System.out.println(length);*/ //打印出3        
       //链式编程: 某个环节的属性和方法是属于谁的, 只要看上一个环节方法返回值和属性类型
        int length = new String("abc").toUpperCase().length(); 
        System.out.println(length); //3
        
        String xx = Person.name;
        Person.name.length(); //.length()看name类型是string就不报错
        System.out.println(xx.length()); //3
		System.out.println(Person.name.length()); //3

        /*
        * System : 类
        * out : 静态属性(因为类名.调用)
        * println() : 属于out的方法(out是PrintStream类型)
		* out方法定义在System.java中,println方法定义在PrintStream.java中
        */
        System.out.println("abc");
    }
}
class Person{
    
    
    static String name = "abc";
}
package com.itheima03.system;
import java.util.Arrays;
import java.util.Date;
/*
*   System类方法:1. static long currentTimeMills(); 获取系统当前时间毫秒值
*                2. exit(0); 退出JVM,意味着程序中止运行 (0表示正常退出, 非0异常退出)     
*               3. arrayCopy() : 将A数组的元素赋值到B数组,源码里才会看到
*/
public class SystemDemo2 {
    
    
    public static void main(String[] args) {
    
    
		// method01();
        /* System.arraycopy看源码,参数如下
         * @param      src     the source array.  源数组
         * @param      srcPos   starting position in the source array. 源数组的开始位置
         * @param      dest     the destination array.  目标数组
         * @param      destPos  starting position in the destination data. 目标数组的开始位置
         * @param      length   the number of array elements to be copied. 将要被拷贝的数组元素个数
         * 数组: 长度不可变
         * ArrayList : 底层是数组, 但长度可变。因为底层原理和arraycopy方法有关
         */
        int[] src = {
    
    1,2,3,4,5};
        int[] dest = {
    
    6,7,8,9,0};
        System.arraycopy(src,2,dest,0,3);
        String str = Arrays.toString(dest); //[6,7,8,9,0]
        System.out.println(str);//[3,4,5,9,0]
    }

    private static void method01() {
    
    
        long time = System.currentTimeMillis(); //节省内存:少创建new对象
        System.out.println(time);//150000...
        long time1 = new Date().getTime();
        System.out.println(time1);//同上
        while(true){
    
    
            System.out.println("xx");
            System.exit(0); //终止死循环
        }
    }
}

4.Math类

package com.itheima04.math;
/*
//Math类 里面方法基本是静态的。方法涉及两数相加并且和对象里所有属性没有关联,可以把这方法设计为静态方法,用类名调用方便,不用创建无用对象浪费内存
	1. public static int   abs(int a)  返回参数的绝对值  (absolute)	                 
	2. public static double ceil(double a)	返回大于或等于参数的最小double值,等于一个整数
	                        天花板 向上取整
	3. public static double floor(double a) 返回小于或等于参数的最大double值,等于一个整数
	                        地板  向下取整
	4. public   static int round(float a) 按照四舍五入返回最接近参数的int
	5. public static int   max(int a,int b)  返回两个int值中的较大值
	6. public   static int min(int a,int b)	返回两个int值中的较小值
	7. public   static double pow (double a,double b) 返回a的b次幂的值。a底数 b是指数
	8. public   static double random() 返回值为double的正值,[0.0,1.0) 伪随机数
*/
public class MathDemo {
    
    
    public static void main(String[] args) {
    
    
        int abs = Math.abs(0);
        System.out.println(abs); //0

        double d = 1.51; 
        long round = Math.round(d); //四舍五入,底层取余数
        System.out.println(round); // 2

        double d2 = -2.1;
        double ceil = Math.ceil(d2); //向上取整,底层取余再+0.5再四舍五入
        System.out.println(ceil); // -2.0

        double floor = Math.floor(d2); //向下取整
        System.out.println(floor); // -3.0

        int a = 2;
        int b = 3;
        int max = Math.max(a, b);// 底层return a > b ? a : b;
        System.out.println(max); //3

        int min = Math.min(a, b);
        System.out.println(min); //2

        double pow = Math.pow(2, 10);
        System.out.println(pow); //1024

        double random = Math.random();
        System.out.println(random); // 0-1之间
    }
}

B站/知乎/微信公众号:码农编程录
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43435675/article/details/107994306