日期:Date,SimpleDateFormat常见API以及包装类

 一.Date类

日期:Date,SimpleDateFormat常见API以及包装类_第1张图片

日期:Date,SimpleDateFormat常见API以及包装类_第2张图片

package com.gch.d1_date;

import java.util.Date;

/**
   目标:学会使用Date类处理时间,获取时间的信息
 */
public class DateDemo1 {
    public static void main(String[] args) {
        // 1.创建一个Date类的对象:代表系统此刻日期时间对象
        Date d = new Date();
        System.out.println(d); // Wed Mar 01 10:04:09 CST 2023

        // 2.获取时间毫秒值
        long time = d.getTime();
        System.out.println(time); // 1677636249346
//        long time1 = System.currentTimeMillis();
//        System.out.println(time1);

        System.out.println("-----------------------");
        // 请计算当前时间往后走1小时121秒之后的时间是多少

        // 1.得到当前时间
        Date d1 = new Date();
        System.out.println(d1); // Wed Mar 01 10:04:09 CST 2023

        // 2.当前时间往后走1小时121秒
        long time2 = System.currentTimeMillis();
        time2 += (60 * 60 + 121) * 1000;

        // 3.把时间毫秒值转换成对应的日期对象
//        Date d2 = new Date(time2);
//        System.out.println(d2);

        Date d3 = new Date();
        // 设置日期对象的时间为当前时间毫秒值对应的时间
        d3.setTime(time2);
        System.out.println(d3); // Wed Mar 01 11:06:10 CST 2023
    }
}

 二.SimpleDateFormat类

 日期:Date,SimpleDateFormat常见API以及包装类_第3张图片

 日期:Date,SimpleDateFormat常见API以及包装类_第4张图片

 日期:Date,SimpleDateFormat常见API以及包装类_第5张图片

 日期:Date,SimpleDateFormat常见API以及包装类_第6张图片

 日期:Date,SimpleDateFormat常见API以及包装类_第7张图片

package com.gch.d2_simpledateformat;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
    目标:SimpleDateFormat简答日期格式化类的使用
    格式化时间
    解析时间
 */
public class SimpleDateFormatDemo1 {
    public static void main(String[] args) {
        // 1.日期对象
        Date d = new Date();
        System.out.println(d); // Sat Feb 25 18:08:35 CST 2023

        // 2.格式化这个日期对象(指定最终格式化的形式)  
        // EEE:代表星期几 a:代表是上午还是下午 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a");
        // 3.开始格式化日期对象称为喜欢的字符串形式
        String rs = sdf.format(d);
        System.out.println(rs); // 2023年02月25日 18:08:35 星期六 下午
        System.out.println("-----------------------");

        // 4.格式化时间毫秒值
        // 需求:请问121秒后的时间是多少
        long time = System.currentTimeMillis() + 121 * 1000;
        String rs2 = sdf.format(time);
        System.out.println(rs2); // 2023年02月28日 14:34:35 星期二 下午
    }
}

 日期:Date,SimpleDateFormat常见API以及包装类_第8张图片

package com.gch.d2_simpledateformat;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo2 {
    public static void main(String[] args) throws ParseException {
        // 目标:学会使用SimpleDateFormat解析字符串时间成为日期对象
        System.out.println("------解析字符串时间-------");
        // 案例:请计算出2021年08月06日11点11分11秒,往后走2天14小时49分06秒后的时间是多少
        // 1.把字符串时间拿到程序中来
        String dataStr = "2021年08月06日 11:11:11";

        // 2.把字符串时间解析成日期对象(本节的重点):形式必须与被解析时间的格式完全一样,否则运行时解析报错!
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:s");
        Date d = sdf.parse(dataStr);

        // 3.往后走2天 14小时 49分 06秒
        long time = d.getTime() + (2L * 24 * 60 * 60 + 14 * 60 * 60 + 49 * 60 + 6) * 1000;

        // 4.格式化这个时间毫秒值就是结果
        System.out.println(sdf.format(time)); // 2021年08月09日 02:00:17
    }
}

日期:Date,SimpleDateFormat常见API以及包装类_第9张图片

 日期:Date,SimpleDateFormat常见API以及包装类_第10张图片

package com.gch.d2_simpledateformat;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatTest3 {
    public static void main(String[] args) throws ParseException {
        // 1.开始和结束时间
        String startTime = "2021-11-11 00:00:00";
        String endTime = "2021-11-11 00:10:00";

        // 2.小贾  小皮
        String xiaoJia = "2021-11-11 00:03:47";
        String xiaoPi = "2021-11-11 00:10:11";

        // 3.解析他们的字符串时间为日期对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d1 = sdf.parse(startTime);
        Date d2 = sdf.parse(endTime);
        Date d3 = sdf.parse(xiaoJia);
        Date d4 = sdf.parse(xiaoPi);

        if(d3.after(d1) && d3.before(d2)){
            System.out.println("小贾秒杀成功,可以发货了!");
        }else{
            System.out.println("小贾秒杀失败!");
        }

        if(d4.after(d1) && d4.before(d2)){
            System.out.println("小皮秒杀成功,可以发货了!");
        }else{
            System.out.println("小皮秒杀失败!");
        }
    }
}

 三.包装类

  • 包装类就是8种基本数据类型对应的对象,就是把基本数据类型变成了一个对象。
  • 包装类是引用数据类型,包装类的本质就是在堆内存中创建了一个对象,对象当中记录对应的数据值。而基本数据类型在变量中记录的是真实的数据值。
  • 获取包装类对象,不需要调方法,直接赋值即可。
  • 集合和泛型不支持基本数据类型,只支持引用数据类型。
  • 包装类(位于java.lang包中)
  • 在Java中,每一次new都是创建了一个新的对象

日期:Date,SimpleDateFormat常见API以及包装类_第11张图片

  • Java是强类型语言:每种数据在Java中都有各自的数据类型,在计算的时候,如果不是同一种数据类型,是无法直接计算的。 

 日期:Date,SimpleDateFormat常见API以及包装类_第12张图片

 

package com.gch.d5_integer;

/**
   目标明白包装类的概念,并使用
 */
public class Test {
    public static void main(String[] args) {
        int a = 10;
        Integer a1 = 11; // 引用类型,认为a1是对象变量
        System.out.println(a);
        System.out.println(a1);

        Integer a2 = a; // 自动装箱

        Integer it = 100;
        int it1 = it; // 自动拆箱
        System.out.println(it1);

//        int age = null; 报错了
        // Integer容错率更高
        Integer age1 = null;
        Integer age2 = 0;

        System.out.println("----------------------");
        // 1.包装类可以把基本类型的数据转换成字符串形式(没啥用)
        Integer i3 = 23;
        String rs = i3.toString();
        System.out.println(rs + 1); // 231

        // 包装类也可以直接+字符串得到字符串类型
        String rs2 = i3 + "";
        System.out.println(rs2 + 1); // 231

        System.out.println("----------------");
        String number = "23";
        // 转换成整数
//        int age = Integer.parseInt(number);
        int age = Integer.valueOf(number);
        System.out.println(age + 1); // 24

        String number1 = "99.9";
        // 转换成小数
//        double score = Double.parseDouble(number);
        double score = Double.valueOf(number1);
        System.out.println(score + 0.1); // 100
    }
}
  1.  Integer.valueOf(int i),如果i的值在-128到127之间,它会提前创建好Integer的对象,并且放到一个数组当中,用Integer.valueOf方法去获取对象的时候,它会判断你这个数据是不是在-128到127之间,如果说在,它不会创建新的对象,而是从数组当中获取已经创建好的对象给你返回,如果说不在-128到127之间,它才会new新的对象

   底层原理:

  1.    因为在实际开发中,-128~127之间的数据,用的比较多
  2.    如果每次使用都是new对象,那么太浪费内存了,所以提前把这个范围之内的每一个数       据都创建好对象
  3.    如果要用到了不会创建新的,而是返回已经创建好的对象。
  4.    == 号是比较两个对象的地址值是否相同
package com.gch.d5_integer;

public class Test2 {
    public static void main(String[] args) {
        // 这两种方式获取对象的区别(掌握)
        // i的值都是127,不会创建新对象,而是获取已有对象
        Integer i6 = Integer.valueOf(127);
        Integer i7 = Integer.valueOf(127);
        System.out.println(i6 == i7); // true

        Integer i8 = Integer.valueOf(128);
        Integer i9 = Integer.valueOf(128);
        System.out.println(i8 == i9); // false

        // 因为看到了new关键字,在Java中,每一次new都是创建了一个新的对象
        // 所以下面的两个对象都是new出来,地址值不一样
        Integer i10 = new Integer(127);
        Integer i11 = new Integer(127);
        System.out.println(i10 == i11); // false

        Integer i12 = new Integer(128);
        Integer i13 = new Integer(128);
        System.out.println(i12 == i13); // false
    }
}
  1.  在JDK5的时候提出了一个机制:自动装箱和自动拆箱
  2.  自动装箱:把基本数据类型会自动地变成其对应的包装类
  3.  自动拆箱:把包装类自动地变成其对应的基本数据类型
  4. 在JDK5以后,int和Integer可以看作是同一个东西,因为在内部可以自动转化。

package com.gch.d5_integer;

public class Test3 {
    public static void main(String[] args) {
//        Integer i1 = 127;
//        Integer i2 = 127;
//        System.out.println(i1 == i2); // true

        // 在底层,此时还会去自动调用静态方法valueOf得到一个Integer对象,只不过这个动作不需要我们自己去操作了
        // 自动装箱的操作
        Integer i1= 10;

        Integer i2 = new Integer(10);
        // 自动拆箱的动作
        int i = i2;
    }
}
package com.gch.d5_integer;

public class Test4 {
    public static void main(String[] args) {
        Integer i1 = 10;
        Integer i2 = 10;
        // 引用数据类型不能直接计算,要先拆箱相加后再装箱赋值给i3
        Integer i3 = i1 + i2;
    }
}

  1.  public static String toBinaryString(int i)  得到二进制
  2.  public static String toOctalString(int i)    得到八进制
  3.  public static String toHexString(int i)      得到十六进制
  4.  public static int parseInt(String s)  将字符串类型的整数转成int类型的整数
  5.  为什么返回值类型为String,因为八进制有可能是01101101
  6.  int类型最多可以取到21亿,也就是最多只能有10位
package com.gch.d5_integer;

public class Test5 {
    public static void main(String[] args) {
        // 1.把整数转成二进制,十六进制
        String str1 = Integer.toBinaryString(100);
        System.out.println(str1); // 1100100

        // 2.把整数转成八进制
        String str2 = Integer.toOctalString(100);
        System.out.println(str2); // 144

        // 3.把整数转成十六进制
        String str3 = Integer.toHexString(100);
        System.out.println(str3); // 64

        // 4.将字符串类型的整数转成int类型的整数
        // 因为Java是强类型语言:每种数据在Java中都有各自的数据类型
        // 在计算的时候,如果不是同一种数据类型,是无法直接计算的
        int i = Integer.parseInt("123");
        System.out.println(i); // 123
        System.out.println(i + 1); // 124

        boolean b = Boolean.valueOf("true");
        System.out.println(b); // true
    }
}
package com.gch.d5_integer;

import java.util.Scanner;

public class Test6 {
    public static void main(String[] args) {
        // 键盘录入
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
       /* String str = sc.next();
        System.out.println(str);*/
        // 弊端:
        // 当我们在使用next,nextInt,nextDouble在接收数据的时候,遇到空格,回车,制表符的时候就停止了
        // 键盘录入的是123 123 那么此时只能接收空格前面的数据
        // 我想要的是接收一整行数据
        // 约定:
        // 以后我们如果想要键盘录入,不管什么类型,统一使用nextLine
        // 特点:遇到回车才停止
        String line = sc.nextLine();
        System.out.println(line);
    }
}

你可能感兴趣的:(Java,java,jvm,servlet)