• Date、DateFormat、Calendar、Math、System、包装类、正则表达式


    Date:

    * 在java中如何表示一个时间对象呢?
    * 需要使用到Date类,在java.util包下面;
    * 使用步骤:
    * 1. 导入包: import java.util.Date;
    * 2. 创建对象,使用构造方法
    * public Date();// 创建一个默认的当前时间点的日期对象.
    * public Date(long time);// 根据指定的毫秒值创建日期对象
    *
    * 3. 使用成员方法:
    * public void setTime(long time);// 为当前日期设置毫秒值
    * public long getTime();// 获取日期对象的毫秒值
    *
    * 注意点:
    * 1. Date类对象进行输出的时候,显示的不是地址值,说明已经覆盖了toString方法
    * 2. 中国属于世界的东八区,默认的时间是: 1970年1月1日8:00
    * 3. 世界的默认时间是格林尼治时间(英国南郊): 1970年1月1日0:00

    public class Demo01Date {
    
    public static void main(String[] args) {
    
    //1.创建对象Date
    Date date = new Date();
    System.out.println(date);//Wed Dec 27 09:00:29 CST 2017
    
    Date date2 = new Date(0L);
    System.out.println(date2);//Thu Jan 01 08:00:00 CST 1970
    
    System.out.println("=========");
    
    //2.成员方法
    //public long getTime();// 获取日期对象的毫秒值
    System.out.println(date.getTime() / 1000 / 60 / 60 / 24 / 365);// 48年
    System.out.println(date2.getTime());// 0
    System.out.println("======");
    
    // public void setTime(long time);// 设置毫秒值
    // 练习: 获取明天的此时此刻
    date.setTime(date.getTime() + 24 * 60 * 60 * 1000);
    System.out.println(date);
    
    }
    }

    DateFormat:
    * 如何直接使用Date日期来表示时间,默认的时间,可读性不好,可是使用DateFormat来进行格式化.
    * DateFormat: 表示时间格式化的类, 在java.text包下面;
    * 由于DateFormat是一个抽象类,不能直接创建对象, 所以需要使用到子类: SimpleDateFormat;
    *
    * 使用步骤:
    * 1. 导入包: import java.text.SimpleDateFormat; /DateFormat
    * 2. 创建对象,使用构造方法:
    * public SimpleDateFormat(String pattern);
    * pattern: 可以传入指定的格式: "yyyy年MM月dd日 HH时mm分ss秒";
    * 3. 使用成员方法
    * public String format(Date date);// 将日期对象转成字符串
    * public Date parse(String strTime);// 将字符串转成日期对象

    package cn.itcast.demo02;
    
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    //计算一个人活了多少天?
    public class Demo03DatePractice {
    public static void main(String[] args) throws ParseException {
    String birthStr = "1995年09月16日";
    DateFormat df = new SimpleDateFormat("yyyy年MM年dd月");
    Date date1 = df.parse(birthStr);
    Date date2 = new Date();
    long day = (date2.getTime() - date1.getTime()) / 1000 / 60 / 60 / 24;
    System.out.println("已经存活了" + day + "天");
    }
    
    }

    或者

    package cn.itcast.fudao02;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    // 请使用代码实现:计算你活了多少天
    public class demo01 {
    public static void main(String[] args) {
    try {
    // a)把你生日的字符串,转换为日期对象
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    Date birthDay = df.parse("1999-09-09");
    // b)把日期对象转换为对应的毫秒值
    System.out.println(birthDay);
    long birthTime = birthDay.getTime();
    // c)获取当前系统的毫秒值
    long now = System.currentTimeMillis();//调用sysytem的方法,获取当前系统的毫秒值
    // d)当前系统毫秒值-出生时间对于的毫秒值计算你活的毫秒值
    long liveTime = now - birthTime;
    // e)把你活毫秒值转换为天
    long day = liveTime / 1000 / 60 / 60 / 24;
    // f)输出天数
    System.out.println("活了" + day + "天");
    } catch (ParseException e) {
    e.printStackTrace();
    }
    }
    }
    

      

     Calendar:
    * 如果使用Date没有办法很好的表示,今天是今年的多少天,本周是今年的多少周...等等信息
    * 如果需要表示的更加丰富,可以使用Calendar, 在java.util包下面;
    * Calendar类: 表示日历对象的一个类,是一个抽象类没有办法创建对象,需要用到子类,在java.util.Calendar;
    *
    * 使用步骤:
    * 1. 导入包: import java.util.Calendar;
    * 2. 创建对象,使用构造方法
    * 由于Calendar是抽象类,可以使用子类: GregorianCalendar
    * 3. 使用成员方法;
    * public static Calendar getInstance();// 静态方法,也可以获取一个日历对象(推荐使用)
    * public Date getTime();// 获取日期对象
    * public int get(int field);// field指的是字段信息(在Calendar中的字段(静态成员变量)里面)
    * public void set(int field, int value);// 设置某一个字段为具体的值
    * public void set(int year, int month, int day);// 设置具体的年月日
    * public void add(int field, int amout);// 将某个字段对应的日期移动(增加或者减少)
    *
    * 注意:
    * 获取月份表示范围是[0,11]表示[1,12]月份

    public class Demo04Calendar {
    
    public static void main(String[] args) {
    
    //1. 创建对象
    //Calendar c = new GregorianCalendar();
    //System.out.println(c);
    
    //2. public static Calendar getInstance();
    // 静态方法,也可以获取一个日历对象(推荐使用)
    Calendar c2 = Calendar.getInstance();
    //System.out.println(c2);
    
    //3. public Date getTime(); 获取一个日期对象
    Date date = c2.getTime();
    System.out.println(date); //Wed Dec 27 10:02:45 CST 2017
    System.out.println(new Date());
    
    System.out.println("======");
    
    //4. public int get(int field);
    // field指的是静态字段信息(在Calendar中的字段里面)
    System.out.println(c2.get(Calendar.YEAR) + "年");
    System.out.println(c2.get(Calendar.MONTH) + 1 + "月");// 月份获取的是[0,11]表示[1,12]月份
    System.out.println(c2.get(Calendar.DAY_OF_MONTH) + "日");
    
    //5. public void set(int field, int value);
    // 设置某一个字段为具体的值
    c2.set(Calendar.YEAR, 2018);// 将年份改成2018年
    c2.set(Calendar.MONTH, 9);// 设置成10月份
    System.out.println(c2.getTime());// 获取的是日历里面的日期对象
    System.out.println("=======");
    
    //6.public void set(int year, int month, int day);
    // 设置具体的年月日
    c2.set(2020, 9, 10);// 设置成2020年的10月10日
    Date date2 = c2.getTime();
    System.out.println(date2);// Sat Oct 10 10:10:59 CST 2020
    
    //7. public void add(int field, int amout);
    // 将某个字段对应的日期移动(增加或者减少)
    c2.add(Calendar.DAY_OF_MONTH, 10);
    System.out.println(c2.getTime());//Tue Oct 20 10:14:04 CST 2020
    
    }
    }
    

      


    如:
    * 从键盘中录入一个年份,判断是平年还是闰年?
    * 方式一: 判断这个年份能不能被4整除,并且不能被100整除, 或者是能被400整除. 特别麻烦
    * 方式二: 只需要判断这个月的2月份有多少天, 如果是29天闰年, 如果是28天平年.

    public class Demo05CalendarPractice {
    
    public static void main(String[] args) {
    // * 1. 创建Scanner对象,键盘中录入一个年份
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入一个年份");
    int year = sc.nextInt();
    
    // * 2. 创建Calendar对象, 使用getInstance方法
    Calendar c = Calendar.getInstance();
    
    // * 3. 设置输入年3月1日, set(int year, int month, int day);
    c.set(year, 2, 1);// 设置成3月1日
    
    // * 4. 将这个日历对象的中的天数,向前偏移一天,add(int field, int amount);
    c.add(Calendar.DAY_OF_MONTH, -1);
    
    // * 5. 获取这个月的天数.get(int Field);
    int day = c.get(Calendar.DAY_OF_MONTH);
    
    // * 6. 判断是29天,还是28天;
    if(day == 29){
    System.out.println(year + "年是闰年");
    }else{
    System.out.println(year + "年是平年");
    }
    }
    }
    

      




    * System: 表示和系统相关的属性类,比如: 获取JDK的路径, 获取系统用户名,获取JDK的供应商等等...;
    *
    * 使用步骤:
    * 1.由于System在java.lang包下面所以使用不需要导入包
    * 2.创建对象,由于System的构造方法都被私有化了,所以不能创建对象
    * 3.使用成员变量(字段),或者成员方法都是静态的内容;
    *
    * 常用的静态字段:
    * System.in 标准的输入(标注的字节输入流);
    * System.out 标准的输出
    * System.err 用来输出错误或者异常信息,以红色字体展示, 快捷键: syse alt + / 回车
    *
    * 静态成员方法:
    * public static void exit(int status);// 退出JVM虚拟机,0表示正常退出,非0异常退出
    * public static long currentTimeMillis();// 获取当前运行在这一行的毫秒值
    * public static void gc();// 建议JVM去做垃圾回收,不一定会回收.
    * public static String getProperty(String key);// 获取指定的相关系统属性.
    * key: 查API中System,先找到getProperties,通过这个方法可以找到所有的key


    * Math: 可以用来表示复杂的数学运算相关的类,在java.lang包下面
    *
    * Math的使用步骤:
    * 1. 导入包, 因为在lang包下所以不需要导入包
    * 2. 创建对象, Math的构造方法都是私有的,所以不能创建对象
    * 3. 使用静态成员变量,静态成员方法
    *
    * 静态的成员变量:
    * Math.PI 表示一个π
    *
    * 静态的成员方法:

    1. public static double abs(double a);// 返回double类型的绝对值
    2. public static double ceil(double a);// 向上取整,以double类型返回
    3. public static double floor(double a);// 向下取整,以double类型返回
    4. public static double min(double a, double b);// 获取两个数的较小值
    5. public static double max(double a, double b);// 获取两个数的较大值
    6. public static double pow(double a, double b);// 返回a的b次方
    7. public static double random();// 返回带正好的double值,该值大于等于0.0且小于1.0
    8. public static long round(double a);// 返回a的四舍五入的值

    框选快捷键:
    alt + shit + a, 操作完成之后再按一次回到正常状态.

    包装类:
    * 如果直接操作基本数据类型,方式有限,只能进行基本的数学运算, 如果变成包装类之后,可以使用类中的方法,进行更加复杂的操作
    * 比如: 可以将对应的数据存储到集合, 比如可以进行进制的转换;
    * 如何将一个基本数据类型变成包装类,对应的类型有哪些?
    * 基本数据类型 包装类类型(都在java.lang包下,全部都能直接使用)
    * byte Byte
    * short Short
    * int Integer(特殊)
    * long Long
    * float Float
    * double Double
    * char Character(特殊)
    * boolean Boolean


    * 一个数字字符串如何和一个基本数据类型之间进行相互转换?
    * 字符串转成基本数据类型:
    * 方式:
    * int num = Integer.parseInt(String str);
    * 基本类型 变量名 = 包装类型.parseXxx(String str);// 和上面同理
    *
    *
    * 基本数据类型转成字符串:
    * 方式一: 基本数据类型 + "" ;// 推荐使用
    * 扩展方式:
    * 方式二: Integer的方法, Integer.toString(int num);
    * 方式三(补充): String的方法, String.valueOf(int num);
    *
    * 注意:
    * 只有数字类型对应的字符串,才能够转成对应基本数据类型

    package cn.itcast.demo02;
    
    public class Demo09StringPackAssign {
    
    public static void main(String[] args) {
    
    //字符串转成基本数据类型:
    String str = "10";
    int num = Integer.parseInt(str);
    System.out.println(num + 10);
    
    System.out.println(Double.parseDouble("60.66"));// 60.66
    System.out.println("===========");
    
    // 基本数据类型转成字符串的方式(三种)
    // * 方式一: 基本数据类型 + "" ;// 推荐使用
    System.out.println(10 + "" + 20);// 1020
    
    // * 方式二: Integer的方法, Integer.toString(int num);
    System.out.println(Integer.toString(100) + 200);// 100200
    
    // * 方式三(补充): String的方法, String.valueOf(int num);
    System.out.println(String.valueOf(50) + 50);// 5050
    }
    }
    

      

    * 自动装箱: 将基本数据类型自动封装引用数据类型
    * 自动拆箱: 将引用数据类型拆箱成基本数据类型

    package cn.itcast.demo02;
    
    public class Demo10AutoPack {
    
    public static void main(String[] args) {
    
    //自动装箱: 将基本数据类型自动封装引用数据类型
    Integer a = 10;
    System.out.println(a);
    
    Integer b = new Integer(20);
    System.out.println(b.toString());
    System.out.println("=========");
    
    //自动拆箱: 将引用数据类型拆箱成基本数据类型
    int c = new Integer(30);
    System.out.println(c);
    
    Integer d = 10;
    d++;// 自动拆成 d = d + 1
    System.out.println(d + 10);// 11+10 = 21
    }
    }
    

      

    正则表达式:
    * 什么是正则表达式呢? 就是一个特殊的字符串, 用来匹配给定的字符串是否满足这个特殊的规则;
    * 和正则表达式相关的方法(String类的方法):
    * 1. public String[] split(String regex);
    * 2. public boolean matches(String regex);
    *
    * 在正则表达式中英文句点(.), 有特殊含义,如果匹配需要使用 \.
    * 杠()在正则表达式中也有特殊含义表示,转移字符,用需要打印出 \, 需要写上: \
    * 加号(+), 字符+, 表示这个字符出现了一次或者多次

    public class Demo11RegexExpresion {
    
    public static void main(String[] args) {
    
    //0.定义需要处理的字符串
    //String content = "10086-10010-10000";
    //String content = "10086.10010.10000";
    String content = "10086,,,,,,10010,,,10000,,99999";
    
    //1. public String[] split(String regex);
    // 定义规则
    //String regex = "-";
    //String regex = "\.";
    String regex = ",+";
    
    //2. 匹配
    String[] array = content.split(regex);
    System.out.println(Arrays.toString(array));
    
    System.out.println("\");// 
    System.out.println("\.");// .
    }
    }
    

      


    例子:

    package cn.itcast.demo02;
    /*
    * String的方法;
    * public boolean matches(String regex);// 使用regex规则来检查调用的字符串是否满足这个规则.
    * 
    */
    public class Demo12MathesRegexExpresion {
    
    public static void main(String[] args) {
    //checkQQ();
    //checkPhone();
    checkEmail();
    }
    
    /*
    * 匹配邮箱:
    * 特点:
    * xxx@xx.xx.xxx
    * hello@qq.com.cn
    * 1. @符号前面必须要有内容
    * 2. @后面也有内容
    * 3. 必须要有一个点. 可以有两个点
    */
    public static void checkEmail(){
    
    //1.定义邮箱
    String email = "1111hahah@qq.com";
    
    //2.定义规则
    String regex = "\w+@\w+\.\w+(\.\w+)?";
    
    //3.匹配邮箱
    boolean isEmail = email.matches(regex);
    
    if(isEmail){
    System.out.println("是一个邮箱");
    }else{
    System.out.println("不是一个邮箱");
    }
    
    }
    
    /*
    * 匹配手机号:
    * 特点:
    * 1. 纯数字
    * 2. 第一位必须是1
    * 3. 第二位可以是: 3, 5, 7, 8
    * 4. 共有11位
    */
    public static void checkPhone(){
    //1.定义手机号
    String phone = "15838389438";
    
    //2.定义规则
    String regex = "[1][3578][0-9]{9}";
    
    //3.匹配, 使用matches方法
    boolean isPhone = phone.matches(regex);
    
    //4.输出
    if(isPhone){
    System.out.println(phone + " 是一个手机号");
    }else{
    System.out.println(phone + " 不是一个手机号");
    }
    }
    
    /*
    * 匹配一个qq号:
    * 特点:
    * 1. 是一个纯数字
    * 2. 开头不能是0
    * 3. qq号的位数是 5到12位
    */
    public static void checkQQ(){
    //1. 定义一个qq号
    String qq = "123456789";
    
    //2.定义规则
    String regex = "[1-9][0-9]{4,11}";
    
    //3.匹配
    boolean isQQ = qq.matches(regex);
    
    if(isQQ){
    System.out.println(qq + " 是一个qq号");
    }else{
    System.out.prin
    

      

    人生就像一场路途,尝遍酸甜苦辣,方知人生苦甜.
  • 相关阅读:
    普林斯顿宣布开源 25 核处理器
    瑞芯微RK3399宣布系统开源,进入百余种行业市场!
    Qt浅谈之二十App自动重启及关闭子窗口
    学在LINUX下编程(各种情况比较详细)
    ASP.NET开发规范:OWIN
    IDEA14中安装go语言插件
    sqlserver不能直接create table as select
    表复制语句select into from 与 insert into select 区别鉴赏
    实现Asp.net Mvc分布式Session Redis群集
    大小端模式
  • 原文地址:https://www.cnblogs.com/zennon/p/8138215.html
Copyright © 2020-2023  润新知