JAVA SE — Day 16

目 录

第1章 正则表达式
1.1 概念
1.2 匹配规则
1.3 匹配练习
1.4 字符串类中涉及正则表达式的常用方法
1.5 正则表达式练习
第2章 Date
2.1 概述
2.2 常用方法
第3章 DateFormat
3.1 概述
3.2 日期格式
3.3 常用方法
第4章 Calendar
4.1 Calendar类概念
4.2 Calendar类常用方法
4.3 注意事项
第5章 日期相关类练习
5.1 求出自己已经出生多少天
5.2 求出今天距离2020年1月1日还有多少天
5.3 闰年计算
第6章 总结

第1章 正则表达式

1.1 正则表达式的概念
  • 正则表达式(英语:Regular Expression,在代码中常简写为regex)。
  • 正则表达式是一个字符串,使用单个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正则表达式通常被用来检索、替换那些符合某个规则的文本。
1.2 正则表达式的匹配规则

参照帮助文档,在Pattern类中有正则表达式的的规则定义,正则表达式中明确区分大小写字母。我们来学习语法规则。

  • 正则表达式的语法规则:

    • 字符:x
      含义:代表的是字符x
      例如:匹配规则为 “a”,那么需要匹配的字符串内容就是 ”a”

    • 字符:\
      含义:代表的是反斜线字符’\’
      例如:匹配规则为”\” ,那么需要匹配的字符串内容就是 ”\”

    • 字符:\t
      含义:制表符
      例如:匹配规则为”\t” ,那么对应的效果就是产生一个制表符的空间

    • 字符:\n
      含义:换行符
      例如:匹配规则为”\n”,那么对应的效果就是换行,光标在原有位置的下一行

    • 字符:\r
      含义:回车符
      例如:匹配规则为”\r” ,那么对应的效果就是回车后的效果,光标来到下一行行首

    • 字符类:[abc]
      含义:代表的是字符a、b 或 c
      例如:匹配规则为”[abc]” ,那么需要匹配的内容就是字符a,或者字符b,或字符c的一个

    • 字符类:[^abc]
      含义:代表的是除了 a、b 或 c以外的任何字符
      例如:匹配规则为”[^abc]”,那么需要匹配的内容就是不是字符a,或者不是字符b,或不是字符c的任意一个字符

    • 字符类:[a-zA-Z]
      含义:代表的是a 到 z 或 A 到 Z,两头的字母包括在内
      例如:匹配规则为”[a-zA-Z]”,那么需要匹配的是一个大写或者小写字母

    • 字符类:[0-9]
      含义:代表的是 0到9数字,两头的数字包括在内
      例如:匹配规则为”[0-9]”,那么需要匹配的是一个数字

    • 字符类:[a-zA-Z_0-9]
      含义:代表的字母或者数字或者下划线(即单词字符)
      例如:匹配规则为” [a-zA-Z_0-9] “,那么需要匹配的是一个字母或者是一个数字或一个下滑线

    • 预定义字符类:.
      含义:代表的是任何字符
      例如:匹配规则为” . “,那么需要匹配的是一个任意字符。如:”a” 规则”[.]” 结果是匹配的

    • 预定义字符类:\d
      含义:代表的是 0到9数字,两头的数字包括在内,相当于[0-9]
      例如:匹配规则为”\d “,那么需要匹配的是一个数字

    • 预定义字符类:\w
      含义:代表的字母或者数字或者下划线(即单词字符),相当于[a-zA-Z_0-9]
      例如:匹配规则为”\w “,,那么需要匹配的是一个字母或者是一个数字或一个下滑线

    • 边界匹配器:^
      含义:代表的是行的开头
      例如:匹配规则为^[abc][0-9]$ ,那么需要匹配的内容从[abc]这个位置开始, 相当于左双引号

    • 边界匹配器: [abc][09] ,那么需要匹配的内容以[0-9]这个结束, 相当于右双引号

    • 边界匹配器:\b
      含义:代表的是单词边界
      例如:匹配规则为”\b[abc]\b” ,那么代表的是字母a或b或c的左右两边需要的是非单词字符([a-zA-Z_0-9])

    • 数量词:X?
      含义:代表的是X出现一次或一次也没有
      例如:匹配规则为”a?”,那么需要匹配的内容是一个字符a,或者一个a都没有

    • 数量词:X*
      含义:代表的是X出现零次或多次
      例如:匹配规则为”a*” ,那么需要匹配的内容是多个字符a,或者一个a都没有

    • 数量词:X+
      含义:代表的是X出现一次或多次
      例如:匹配规则为”a+”,那么需要匹配的内容是多个字符a,或者一个a

    • 数量词:X{n}
      含义:代表的是X出现恰好 n 次
      例如:匹配规则为”a{5}”,那么需要匹配的内容是5个字符a

    • 数量词:X{n,}
      含义:代表的是X出现至少 n 次
      例如:匹配规则为”a{5, }”,那么需要匹配的内容是最少有5个字符a

    • 数量词:X{n,m}
      含义:代表的是X出现至少 n 次,但是不超过 m 次
      例如:匹配规则为”a{5,8}”,那么需要匹配的内容是有5个字符a 到 8个字符a之间

1.3 正则表达式规则匹配练习

请写出满足如下匹配规则的字符串:

  • 规则:”[0-9]{6,12}”
    该规则需要匹配的内容是:长度为6位到12位的数字。

    • 如:使用数据”123456789”进行匹配结果为true;
    • 使用数据”12345”进行匹配结果为false。
  • 规则:”1[34578][0-9]{9}”
    该规则需要匹配的内容是:11位的手机号码,第1位为1,第2位为3、4、5、7、8中的一个,后面9位为0到9之间的任意数字。

    • 如:使用数据”12345678901”进行匹配结果为false;
    • 使用数据”13312345678”进行匹配结果为true。
  • 规则:”a*b”
    该规则需要匹配的内容是:在多个a或零个a后面有个b;b必须为最后一个字符。

    • 如:使用数据”aaaaab”进行匹配结果为true;
    • 使用数据”abc”进行匹配结果为false。
1.4 字符串类中涉及正则表达式的常用方法

这里写图片描述

1)public boolean matches(String regex) //判断字符串是否匹配给定的规则

  • 举例:校验qq号码.
    1: 要求必须是5-15位数字
    2: 0不能开头
    String qq = “604154942”;
    String regex = “[1-9][0-9]{4,14}”;
    boolean flag2 = qq.matches(regex);

    • 代码演示:
/*
 * 检查QQ是否符合规则
 * 0不能开头,全部是数字,位数5-10位都可以
 * 补充:[0-9]还可以写成[\\d],而[\\D]表示取反,即不是数字的
 */
public class RegexDemo {
     public static void main(String[] args) {
        checkQQ();
    }
     public static void checkQQ() {
         String QQ = "123q456";
         //检查QQ号码与规则是否匹配,String类的方法matches
         Boolean b = QQ.matches("[1-9][0-9]{4,9}");
                 System.out.println(b); //输出结果为:false
     }
}
  • 举例:校验手机号码
    1:要求为11位数字
    2:第1位为1,第2位为3、4、5、7、8中的一个,后面9位为0到9之间的任意数字。
    String phone = “18800022116”;
    String regex = “1[34578][0-9]{9}”;
    boolean flag = phone.matches(regex);

  • 代码演示:

/*
 * 检查手机号码是否符合规则
 * 必须是1开头,第二位可以是34578,后边可以是任意数字,一共11位
 * 
 */
public class RegexDemo {
     public static void main(String[] args) {
         checkTel() ;
    }
     public static void checkTel() {
         String telNumber = "1333587653";
         //String类的方法matches
         Boolean b = telNumber.matches("1[34578][\\d]{9}");//其中[34578]中的数字不需要固定顺序
                 System.out.println(b); //输出结果为:false
     }
}

2) public String[] split(String regex) //根据给定正则表达式的匹配规则,拆分此字符串

  • 举例:分割出字符串中的的数字
    String s = “18-22-40-65”;
    String regex = “-“;
    String[] result = s.split(regex);

    String s = “18 22 40 65”;
    String regex = ” “;
    String[] result = s.split(regex);

  • 代码演示:
    ① 12-25-36-98: 按照-进行切割

/*
 * String类方法split对字符串进行切割
 * 12-25-36-98 按照-进行切割
 */
public class RegexDemo1 {
     public static void main(String[] args) {
         split_1();
    }

    public static void split_1() {
       String str = "12-25-36-98" ;
       //按照-对字符串进行切割
       String[] strArr = str.split("-");
       for(int i = 0; i< strArr.length;i++) {
           System.out.println(strArr[i]);//输出结果为:12
                                         //          25
                                         //          36
                                         //          98
       }
    }
}

② 18 22 40 65: 按照” “进行切割

/*
 * String类方法split对字符串进行切割
 * 18  22  40  65: 按照" "进行切割
 */
public class RegexDemo2 {
     public static void main(String[] args) {
         split_2();
    }

    public static void split_1() {
       String str = "18 22 40 65" ;
       //按照-对字符串进行切割
       String[] strArr = str.split(" ");
       System.out.println("数组的长度"+strArr.length);//输出结果:数组的长度4
       for(int i = 0; i< strArr.length;i++) {
           System.out.println(strArr[i]);//输出结果为:18
                                         //          22
                                         //          40
                                         //          65
       }
    }
    //有时数据不规则,有很多空格,按照上述办法切割则会出现下列结果
    public static void split_2() {
           String str = "18    22    40    65" ;
           //按照-对字符串进行切割
           String[] strArr = str.split(" ");
           System.out.println("数组的长度"+strArr.length);//输出结果:数组的长度13
           for(int i = 0; i< strArr.length;i++) {
               System.out.println(strArr[i]);//输出结果为:18



                                             //          22



                                             //          40



                                             //          65

           }
      }
      //为了防止上述结果,在空格后加上一个"+",表示出现多个空格
    public static void split_2() {
           String str = "18    22    40    65" ;
           //按照-对字符串进行切割
           String[] strArr = str.split(" +");
           System.out.println("数组的长度"+strArr.length);//输出结果:数组的长度4
           for(int i = 0; i< strArr.length;i++) {
               System.out.println(strArr[i]);//输出结果为:18
                                             //          22
                                             //          40
                                             //          65
           }
      }
}

③ 192.168.105.27: 按照”\.”进行切割

/*
 * String类方法split对字符串进行切割
 * 192.168.105.27: 按照"\\."进行切割
 */
public class RegexDemo2 {
     public static void main(String[] args) {
         split_4();
    }

     public static void split_3() {
       String str = "192.168.105.27" ;
       //按照-对字符串进行切割
       String[] strArr = str.split(".");
       System.out.println("数组的长度"+strArr.length);//输出结果:数组的长度0
         for(int i = 0; i< strArr.length;i++) {
           System.out.println(strArr[i]);//输出结果为:
           //因为.在正则里表示任意字符,必须用"\\."转成普通的.
         }
      }
      public static void split_4() {
           String str = "192.168.105.27" ;
           //按照-对字符串进行切割
           String[] strArr = str.split("\\.");
           System.out.println("数组的长度"+strArr.length);//输出结果:数组的长度4
           for(int i = 0; i< strArr.length;i++) {
               System.out.println(strArr[i]);//输出结果为:192
                                             //          168
                                             //          105
                                             //          27
           }
      }    
}

3)public String replaceAll(String regex,String replacement) //将符合规则的字符串内容,全部替换为新字符串

  • 举例:把文字中的数字替换成*

    String s = “Hello12345World6789012”;
    String regex = “[0-9]”;
    String result = s.replaceAll(regex, “*”);

  • 代码演示:
public class RegexDemo2 {
     public static void main(String[] args) {
         replaceAll_1();
    }
            /*
             * "Hello12345World6789012"将所有数字替换掉
             * String类方法replaceAll(正则规则,替换后的新字符串)
             */
            public static void replaceAll_1(){
                String str = "Hello12345World6789012";
                str = str.replaceAll("[\\d]+", "#");
                //"[\\d+]"表示一个位代表一个数字,则("[\\d+]", "#")表示每个数字都换成一个#  输出结果为:Hello#####World#######
                //"[\\d]+"表示多位数字,则("[\\d+]", "#")表示多位连在一起的数字替换成一个#
                System.out.println(str);//输出结果为:Hello#World#
            }
}
1.5 正则表达式练习

1)匹配正确的数字

  • 匹配规则:
    匹配正整数:”\d+”
    匹配正小数:”\d+\.\d+”
    匹配负整数:”-\d+”
    匹配负小数:”-\d+\.\d+”
    匹配保留两位小数的正数:”\d+\.\d{2}”
    匹配保留1-3位小数的正数:”\d+\.\d{1,3}”

2)匹配合法的邮箱

  • 匹配规则:
    ”[a-zA-Z_0-9]+@[a-zA-Z_0-9]+(\.[a-zA-Z_0-9]+)+”
    ”\w+@\w+(\.\w+)+”

  • 代码示例:

/*
 * 检查邮箱地址是否符合规则
 * 规则:
 *    1234567@qq.com
 *    mym_ail@sina.com
 *    nimail@163.com
 *    wodemail@yahoo.com.cn    
 *   
 *   @前面:  数字字母_都可以  个数不能少于1个
 *   @后面:  数字字母可以     个数不能少于1个
 *   .: 后面 字母 可能有几个.
 */
public class RegexDemo3 {
    public static void main(String[] args) {
         checkMail();
    } 
    public static void checkMail() {
        String email = "abc123@sina.com.cn" ;
        boolean  b = email.matches("[a-zA-Z0-9_]+@[0-9a-z]+(\\.[a-z]+)+");
        //(\\.[a-z]+)+表示“.com.cn”这些可以出现一次到多次
        System.out.println(b);//输出结果为:true
    }
}

3)获取IP地址(192.168.1.100)中的每段数字

  • 匹配规则:
    ”\.”

第2章 Date

2.1 Date类概述
  • 类 Date 表示特定的瞬间,精确到毫秒。

    • //创建日期对象,把当前的毫秒值转成日期对象
      Date date = new Date(1607616000000L);
      System.out.println(date);
      //打印结果:Fri Dec 11 00:00:00 CST 2020
  • 毫秒值概念

    • a: 时间和日期类
      * java.util.Date
    • b: 毫秒概念
      * 1000毫秒=1秒
    • c: 毫秒的0点
      * System.currentTimeMillis() 返回值long类型参数
      * 获取当前日期的毫秒值 3742769374405
      * 时间原点; 公元1970年1月1日,午夜0:00:00 英国格林威治 毫秒值就是0
      * 时间和日期的计算,必须依赖毫秒值
2.2 Date类常用方法

1) Date类的构造方法

  • 空参构造
    * public Date()
import java.util.Date;

/*
 * Date空参构造方法
 * 获取到的是当前操作系统中的时间和日期
 */
public class Datedemo1 {
    public static void main(String[] args) {
        function() ;

    }
    public static void function() {
         Date date = new Date();
         System.out.println(date);//输出结果为:Wed Nov 29 19:59:22 JST 2017
    }
}
  • 带参构造
    * public Date(long times)
import java.util.Date;

/*
 * Date类的long参数构造方法
 * Date(long)表示毫秒值
 */
public class Datedemo1 {
    public static void main(String[] args) {
        function() ;

    }
    public static void function() {
         Date date = new Date(0);
         System.out.println(date);//输出结果为:Thu Jan 01 09:00:00 JST 1970
    }
}

2)Date类的get和set方法

  • public long getTime():将当前的日期对象,转为对应的毫秒值
import java.util.Date;
/*
 * Date类方法 getTime()返回值long 返回的是毫秒值
 * 将Date表示的日期转换成毫秒值
 */
public class Datedemo1 {
    public static void main(String[] args) {
        function() ;

    }
    public static void function() {
         Date date = new Date();
         long time = date.getTime();
         System.out.println(time);//输出结果为:1512012176577
    }
}
  • public void setTime(long times);:根据给定的毫秒值,生成对应的日期对象 (构造方法也可以做到)
import java.util.Date;

/*
 * Date类方法 setTime(long)
 * 将日期对象设置到指定的毫秒值上
 * 毫秒值转换成日期
 */
public class Datedemo1 {
    public static void main(String[] args) {
        function() ;

    }
    public static void function() {
         Date date = new Date();
         System.out.println(date);//输出结果为:Thu Nov 30 12:25:37 JST 2017
        date.setTime(0);
         System.out.println(date);//输出结果为:Thu Jan 01 09:00:00 JST 1970
    }
}

第3章 DateFormat

3.1 DateFormat类概述
  • DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat类)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。
  • 我们通过这个类可以帮我们完成日期和文本之间的转换。DateFormat 可帮助进行格式化并解析任何语言环境的日期。对于月、星期,甚至日历格式(阴历和阳历),其代码可完全与语言环境的约定无关。
3.2 日期格式
  • 日期格式化SimpleDateFormat
    1) 对日期进行格式化(自定义)

    • 对日期格式化的类 java.text.DateFormat 抽象类, 普通方法,也有抽象的方法
    • 实际使用是子类 java.text.SimpleDateFormat 可以使用父类普通方法,重写了抽象方法

    2)对日期进行格式化的步骤

    • 1: 创建SimpleDateFormat对象
      * 在类构造方法中,写入字符串的日期格式 (自己定义)

    • 2: SimpleDateFormat调用方法format对日期进行格式化
      * public String format(Date date) 传递日期对象,返回字符串
      * 日期模式:
      * yyyy 年份
      * MM 月份
      * dd 月中的天数
      * HH 0-23小时
      * mm 小时中的分钟
      * ss 秒
      * yyyy年MM月dd日 HH点mm分钟ss秒 汉字修改,: - 字母表示的每个字段不可以随便写

    3)代码示例:

public class SimpleDateFormatDemo {
   public static void main(String[] args) {
       function ();
   }
   public static void function () {
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH点mm分ss秒");
       String date = sdf.format(new Date());
       System.out.println(date);//输出结果为:2017年11月30日12点46分10秒
   }
}
3.3 DateFormat类常用方法

1)format方法,用来将Date对象转换成String(上一节提到的)
2)parse方法,用来将String转换成Date(转换时,该String要符合指定格式,否则不能转换)。

  • ① 使用步骤
    • 1: 创建SimpleDateFormat的对象
      * 构造方法中,指定日期模式
    • 2: 子类对象,调用方法 parse 传递String,返回Date
      * 注意: 时间和日期的模式yyyy-MM-dd, 必须和字符串中的时间日期匹配
  • ② 代码示例:
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo1 {
    public static void main(String[] args)throws Exception {
        function ();

    }
    public static void function () throws Exception{//throws Exception 是为了防止异常,以后学
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse("1995-5-6");
        System.out.println(date);//输出结果:Sat May 06 00:00:00 JST 1995
    }
}

第4章 Calendar

4.1 Calendar类概念
  • Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。
  • Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,将语言敏感内容处理好,再返回子类对象,如下:
    • Calendar类静态方法
      这里写图片描述
      Calendar c = Calendar.getInstance(); //返回当前时间
4.2 Calendar类常用方法

这里写图片描述

1) public static Calendar getInstance() //获取日期对象

2) public int get(int field) //获取时间字段值,字段参见帮助文档
* YEAR 年
* MONTH 月,从0开始算起,最大11;0代表1月,11代表12月。
* DATE 天
* HOUR 时
* MINUTE分
* SECOND秒

  • 代码示例
import java.util.Calendar;

/*
 * Calender类的get方法,获取日历字段的值,如某天某时某分等
 * int get(int)
 * 参数int 返回值表示日历字段的具体数值
 */
public class CalendarDemo1 {
    public static void main(String[] args) {
        function();
    } 

    public static void function() {
        Calendar c = Calendar.getInstance();
        //获取年份
        int  year = c.get(Calendar.YEAR);
        //获取月份
        int  month = c.get(Calendar.MONTH)+1;//因为是0到11月,所以需要加一
        //获取天数
        int  day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(year+"年"+month+"月"+day+"日");//输出结果为:2017年11月30日
     }
}

3) public void add(int field,int amount) //指定字段增加某值

  • 成员方法
    * add(int field, int value) 进行整数的偏移
    * int get(int field) 获取指定字段的值
  • 代码示例:
import java.util.Calendar;

/*
 * Calender类的add方法,可以指定一个日历中的字段进行整数偏移:
 * add(int field,int value) :
 *
 */
public class CalendarDemo1 {
    public static void main(String[] args) {
        function();
    } 

    public static void function() {
        Calendar c = Calendar.getInstance();
        //设置偏移280天
        c.add(Calendar.DAY_OF_MONTH,280);
        //c.add(Calendar.DAY_OF_MONTH,-280);//输出结果为:2017年2月23日

        //获取年份
        int  year = c.get(Calendar.YEAR);
        //获取月份
        int  month = c.get(Calendar.MONTH)+1;
        //获取天数
        int  day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(year+"年"+month+"月"+day+"日");//输出结果为:2018年9月6日
     }
}

4) public final void set(int field,int value)//设置指定字段的值

  • 设置日历方法中的两种:
    • set(int field,int value) :
      field设置的是哪个日历字段,
      value设置具体数值
    • set(int year,int month,int day) :
      传递3个整数的年,月,日
  • 代码示例:
import java.util.Calendar;
/*
 * Calender类的set方法,设置日历方法中的两种:
 * set(int field,int value) :
 *                         field设置的是哪个日历字段, value设置具体数值
 * set(int year,int month,int day) :
 *                         传递3个整数的年,月,日
 */
public class CalendarDemo1 {
    public static void main(String[] args) {
        function();
    } 

    public static void function() {
        Calendar c = Calendar.getInstance();
        //设置到10月份
        //c.set(Calendar.MONTH,7);//输出结果为:2017年8月30日
        //或者直接设置年月日
        c.set(2099, 4, 1);

        //获取年份
        int  year = c.get(Calendar.YEAR);
        //获取月份
        int  month = c.get(Calendar.MONTH)+1;
        //获取天数
        int  day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(year+"年"+month+"月"+day+"日");//输出结果为:2099年5月1日
     }
}

5) public final Date getTime() //获取该日历对象转成的日期对象

  • 成员方法
    * getTime() 把日历对象,转成Date日期对象
    * get(日历字段) 获取指定日历字段的值
  • 代码演示
import java.util.Calendar;
import java.util.Date;

/*
 * Calender类的getTime()方法,把日历对象转成Date日期对象
 * 
 */
public class CalendarDemo1 {
    public static void main(String[] args) {
        function();
    } 

    public static void function() {
        Calendar c = Calendar.getInstance();
        Date date = c.getTime();
        System.out.println(date); //输出结果为:Thu Nov 30 15:25:21 JST 2017
     }
}
4.3 注意事项
  • 西方星期的开始为周日,中国为周一。
  • 在Calendar类中,月份的表示是以0-11代表1-12月。
  • 日期是有大小关系的,时间靠后,时间越大。

第5章 日期相关类练习

5.1 求出自己已经出生多少天
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

/*
 * 计算活了多少天
 * 需要数据:生日、今日日期
 * 两个日期变成毫秒进行减法计算
 */
public class DateTest {
    public static void main(String[] args)throws Exception {
        function();
    }
    public static void function() throws Exception{
        //获取出生日期,键盘输入
        System.out.println("请输入您的生日,格式要求yyyy-mm-dd");
        String birthdayString = new Scanner(System.in).next();
        //将字符串日期转成Date对象
        //创建SimpleDateFormat对象,写日期模式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //调用方法parse,字符串转成日期对象
        Date birthdayDate = sdf.parse(birthdayString);

        //获取今天的日期
        Date todayDate = new Date();

        //将两个日期转成毫秒值,Date类的方法getTine
        long birthdaySecond = birthdayDate.getTime();
        long todaySecond = todayDate.getTime();
        long second =todaySecond-birthdaySecond ;
        if(second<0) {
            System.out.println("您还没出生呢");
        }else {
        System.out.println( second/1000/60/60/24 );
        }
    }
}

或者:

public static void main(String[] args){
    Calendar my = Calendar.getInstance();
    Calendar c = Calendar.getInstance();
    //设置出生年月日 1995-05-10
    my.set(Calendar.YEAR, 1995);
    my.set(Calendar.MONTH, 4);
    my.set(Calendar.DATE, 10);
    //获取时间中的天数
    int day = c.get(Calendar.DATE);
    int myDay = my.get(Calendar.DATE);
    System.out.println(day - myDay);
}
5.2 求出今天距离2020年1月1日还有多少天
  • 思路:
    1.获取当前时间对应的天数
    2.获取2020年1月1日对应的天数
    3.两个时间相减(2020年1月1日的天数 –当前时间天数)
  • 代码示例:
public static void main(String[] args){
    Calendar my = Calendar.getInstance();
    Calendar c = Calendar.getInstance();
    //设置年月日 2020-01-01
    my.set(Calendar.YEAR, 2020);
    my.set(Calendar.MONTH, 0);
    my.set(Calendar.DATE, 1);
    //获取时间中的天数
    int day = c.get(Calendar.DATE);
    int myDay = my.get(Calendar.DATE);
    System.out.println(myDay - day);
}
5.3 闰年计算
/*
 *  闰年计算
 *  2000 3000
 *  高级的算法: 日历设置到指定年份的3月1日,add向前偏移1天,获取天数,29闰年
 */
import java.util.Calendar;

public class DateTest1 {
    public static void main(String[] args) {
         function_1();
    }

    public static void function_1(){
        Calendar c = Calendar.getInstance();
        //将日历,设置到指定年的3月1日
        c.set(2088, 2, 1);
        //日历add方法,向前偏移1天
        c.add(Calendar.DAY_OF_MONTH, -1);
        //get方法获取天数
        int day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(day);//输出结果为:29就是闰年,28为平年
    }
}

第6章 总结

6.1 正则表达式
  • 正则表达式:用来定义匹配规则,匹配一系列符合某个句法规则的字符串。
  • 正则表达式的匹配规则
    请参见1.2 正则表达式的匹配规则
  • 正则表达式的常用方法:
    • public boolean matches(String regex) //判断字符串是否匹配给定的规则
    • public String[] split(String regex) //根据给定正则表达式的匹配规则,拆分此字符串
    • public String replaceAll(String regex,String replacement) //将符合规则的字符串内容,全部替换为新字符串
6.2 Date类
  • 日期/时间类
  • 构造方法:
    • public Date()// 系统当前日期时间
    • public Date(long date) 得到一个1970年1月1日 0点这个时间基础上,加上参数date 毫秒值对应的日期时间
  • 方法:
    public long getTime() 获取日期所对应的毫秒值
6.3 DateFormat
  • 是日期/时间格式化子类的抽象类, 使用其子类SimpleDateFormat 实例化
  • 构造方法:
    • public SimpleDateFormat() 默认的格式化操作
    • public SimpleDateFormat(String pattern) 按照指定的格式,进行日期格式化
      日期和时间模式
      y 年
      M 年中的月份
      d 月份中的天数
      H 一天中的小时数(0-23)
      m 小时中的分钟数
      s 分钟中的秒数
      S 毫秒数
  • 方法:
    • public final String format(Date date) 把日期 格式化成字符串
    • public Date parse(String source) 把日期字符串 转换成 日期对象
6.4 Calendar
  • 日历类,可获取日期中指定字段的值
  • 方法:
    • public static Calendar getInstance() //获取日期对象
    • public int get(int field) //获取时间字段值
    • public void add(int field,int amount) //指定字段增加某值
    • public final void set(int field,int value)//设置指定字段的值
    • public final Date getTime() //获取该日历对象转成的日期对象
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值