Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

目录

第一章 正则表达式

1.1 正则表达式的概念

1.2 正则表达式的匹配规则

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

1.4字符串类中涉及正则表达式的常用方法

1.4.1 匹配练习

1.4.2 拆分练习

1.4.3 替换练习

1.5 正则表达式练习

第二章 Date类

2.1 Date类概述

2.2 Date类常用方法

第三章 DateFormat

3.1 DateFormat类概述

3.2 日期格式

3.3 DateFormat类常用方法

第四章 Calendar

4.1 Calendar类概念

4.2 Calendar类常用方法

4.2.1 获取日期对象 

 4.2.2 get()方法

 4.2.3 set()方法

4.2.4 add()方法

4.2.5 getTime()方法

第五章 日期相关类练习

5.1求出自己已经出生多少天

5.2  闰年计算

第六章 总结


第一章 正则表达式

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](与\\d同)

含义:代表的是 0到9数字,两头的数字包括在内

例如:匹配规则为"[0-9]",那么需要匹配的是一个数字

 

字符类:[a-zA-Z_0-9](与\\w同)

含义:代表的字母或者数字或者下划线(即单词字符)

例如:匹配规则为" [a-zA-Z_0-9] ",那么需要匹配的是一个字母或者是一个数字或一个下滑线

 

预定义字符类:.

含义:代表的是任何字符

例如:匹配规则为" . ",那么需要匹配的是一个任意字符。如果,就想使用 . 的话,使用匹配规则"\\."来实现

 

预定义字符类:\d

含义:代表的是 0到9数字,两头的数字包括在内,相当于[0-9]

例如:匹配规则为"\d ",那么需要匹配的是一个数字

 

预定义字符类:\w

含义:代表的字母或者数字或者下划线(即单词字符),相当于[a-zA-Z_0-9]

例如:匹配规则为"\w ",,那么需要匹配的是一个字母或者是一个数字或一个下滑线

 

边界匹配器:^

含义:代表的是行的开头

例如:匹配规则为^[abc][0-9]$ ,那么需要匹配的内容从[abc]这个位置开始, 相当于左双引号

 

边界匹配器:$

含义:代表的是行的结尾

例如:匹配规则为^[abc][0-9]$ ,那么需要匹配的内容以[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之间

换行与回车的区别: 

换行:产生一个空行,光标在原有位置的下一行。

回车:光标来到下一行行首

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类 Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

 

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字符串类中涉及正则表达式的常用方法

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

1.4.1 匹配练习

package day16.demo1;
/*
 *  实现正则规则和字符串进行匹配,使用到字符串类的方法
 *  String类三个和正则表达式相关的方法
 *    boolean matches(String 正则的规则)
 *    "abc".matches("[a]")  匹配成功返回true
 *    
 *    String[] split(String 正则的规则)
 *    "abc".split("a") 使用规则将字符串进行切割
 *     
 *    String replaceAll( String 正则规则,String 字符串)
 *    "abc0123".repalceAll("[\\d]","#")
 *    安装正则的规则,替换字符串
 */ 
public class RegexDemo {
	public static void main(String[] args) {
		checkTel();
		checkQQ();
	}

	
	/*
	 *  检查手机号码是否合法
	 *  1开头 可以是34578  0-9 位数固定11位
	 */
	public static void checkTel(){
		String telNumber = "13315128005";
	//boolean b = telNumber.matches("1[34578][//d]{9}");
		boolean b = telNumber.matches("1[34857][0-9]{9}");
	System.out.println(b);
	
	}
	
	/*
	 *  检查QQ号码是否合法
	 *  0不能开头,全数字, 位数5,10位
	 *  123456 
	 *  \\d  \\D匹配不是数字
	 */
	public static void checkQQ(){
		String QQ = "0123456";
		//检查QQ号码和规则是否匹配,String类的方法matches
		boolean b =  QQ.matches("[1-9][\\d]{4,9}");
		System.out.println(b);
		
	}
}

 

1.4.2 拆分练习

任意长度的空格:  “ +”

小数点:“\\.”          因为点代表任意字符,因此需要加转义字符。

package day16.demo1;

public class RegexDemo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		split_1();
//		split_2();
//		split_3();
	}

	/*
	 * String类方法split对字符串进行切割
	 * 192.168.105.27 按照 点切割字符串
	 */
	public static void split_3(){
		String ip = "192.168.105.27";
		//String[] arr = ip.split(".");//错误原因是在正则中点代表任意字符
		String[] arr = ip.split("\\.");
		System.out.println("数组长度为:"+arr.length);
		for(int i = 0;i<arr.length;i++) {
			System.out.println(arr[i]);
			
		}
}
	/*
	 * String类方法split对字符串进行切割
	 * 18 22 40 65 按照空格切割字符串
	 */
	public static void split_2(){
		String str = "18    22     40          65";
		String[] arr = str.split(" +");
		System.out.println("数组长度为:"+arr.length);
		for(int i = 0;i<arr.length;i++) {
			System.out.println(arr[i]);
			
		}
	}
	/*
	 *  String类方法split对字符串进行切割
	 *  12-25-36-98  按照-对字符串进行切割
	 */
	public static void split_1(){
		String str = "12-25-36-98";
		//按照-对字符串进行切割,String类方法split
		String[] strArr = str.split("-");
		System.out.println("数组的长度"+strArr.length);
		for(int i = 0 ; i < strArr.length ; i++){
			System.out.println(strArr[i]);
		}
	}
	
}

 

1.4.3 替换练习

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

注意区分:replace()与replaceAll()

package day16.demo1;

public class RegexDemo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		replaceAll_1();
	}
	/*
	 * "Hello12345World6789012"将所有数字替换掉
	 * String类方法replaceAll(正则规则,替换后的新字符串)
	 */
	public static void replaceAll_1(){
		String str = "Hello12345World6789012";
		str = str.replaceAll("[\\d]+", "#");
		System.out.println(str);
}
	
}

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

 

1.5 正则表达式练习

匹配正确的数字

匹配规则:

    匹配正整数:”\\d+”

    匹配正小数:”\\d+\\.\\d+” 

    匹配负整数:”-\\d+”

    匹配负小数:”-\\d+\\.\\d+”

    匹配保留两位小数的正数:”\\d+\\.\\d{2}”

    匹配保留1-3位小数的正数:”\\d+\\.\\d{1,3}”

匹配合法的邮箱

匹配规则:

    ”[a-zA-Z_0-9]+@[a-zA-Z_0-9]+(\\.[a-zA-Z_0-9]+)+”

    ”\\w+@\\w+(\\.\\w+)+”

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

匹配规则:

    ”\\.”

package day16.demo1;

public class RegexDemo2 {
	public static void main(String[] args) {
		checkMail();
	}
	/*
	 *  检查邮件地址是否合法
	 *  规则:
	 *   1234567@qq.com
	 *   mym_ail@sina.com
	 *   nimail@163.com
	 *   wodemail@yahoo.com.cn    
	 *   
	 *   @: 前  数字字母_ 个数不能少于1个
	 *   @: 后  数字字母     个数不能少于1个
	 *   .: 后面 字母 
	 *     
	 */
	public static void checkMail(){
		String email ="abc123@sina.com";
//		boolean b = email.matches("[a-zA-Z_0-9]+@[a-z]+(\\.[a-z]+)+");
		boolean b = email.matches("[\\w]+@[a-z]+(\\.[a-z]+)+");
		System.out.println(b);
		
		
	}
}

 这样只能验证邮箱格式是否正确,但是邮箱是否存在,一般需要发送邮箱验证码激活。

 

第二章 Date类

 

2.1 Date类概述

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

查阅Date类的描述,发现Date拥有多个构造函数,其中有未过时的构造函数可以把毫秒值转成日期对象。

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

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

 

可是将毫秒值转成日期后,输出的格式不利于我们阅读,查阅API,看到了toString方法。

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

点开toString()方法查阅,原来上面打印的date对象就是默认调用了这个toString方法,

ctrl+shift+o 导包
时间和日期类: java.util.Date
 

毫秒概念: 1000毫秒=1秒

毫秒的0点: 
 System.currentTimeMillis() 返回值long类型参数
获取当前日期(程序运行时间)的毫秒值   3742769374405


时间原点:公元1970年1月1日,午夜0:00:00 英国格林威治 ,时间原点的毫秒值就是0

毫秒的重要性: 因为其是long型,可以用于时间和日期的计算。因此计算机底层时间都是毫秒值。

long time = System.currentTimeMillis();
System.out.println(time);

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

 

2.2 Date类常用方法

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

getTime()是将Date值转为毫秒值。

setTime()是将毫秒值转为Date值。

package day16.demo2;

import java.util.Date;

/*
 *  时间和日期类
 *    java.util.Date
 *    
 *  毫秒概念: 1000毫秒=1秒
 *  
 *  毫秒的0点: 
 *     System.currentTimeMillis() 返回值long类型参数
 *     获取当前日期的毫秒值   3742769374405
 *     时间原点; 公元1970年1月1日,午夜0:00:00 英国格林威治  毫秒值就是0
 *     时间2088年8月8日
 *  
 *  重要: 时间和日期的计算,必须依赖毫秒值
 *    XXX-XXX-XX = 毫秒
 *    
 * 		long time = System.currentTimeMillis();
		System.out.println(time);
 */
public class DateDemo {
	public static void main(String[] args) {
		function_3();
	}
	/*
	 * Date类方法 setTime(long )传递毫秒值
	 * 将日期对象,设置到指定毫秒值上
	 * 毫秒值转成日期对象
	 * Date的构造方法
	 */
	public static void function_3(){
		Date date = new Date();
		System.out.println(date);
		
		date.setTime(1609995247075L);
		System.out.println(date);//Thu Jan 07 12:54:07 CST 2021
	}
	
	/*
	 *   Date类方法 getTime() 返回值long
	 *   返回的是毫秒值
	 *   将Date表示的日期,转成毫秒值
	 *   日期和毫秒值转换
	 */
	public static void function_2(){
		Date date = new Date();
		long time = date.getTime();
		System.out.println(time);//1609995247075
	}
	
	/*
	 * Date类的long参数的构造方法
	 * Date(long ) 表示毫秒值
	 * 传递毫秒值,将毫秒值转成对应的日期对象
	 */
	public static void function_1(){
		Date date = new Date(0);
		System.out.println(date);
	}
	
	/*
	 * Date类空参数构造方法
	 * 获取到的是,当前操作系统中的时间和日期
	 */
	public static void function(){
		Date date = new Date();
		System.out.println(date);//Thu Jan 01 08:00:00 CST 1970
	}
}

 

第三章 DateFormat

 

3.1 DateFormat类概述

DateFormat 是日期/时间格式化的抽象类, SimpleDateFormat是其子类,因此建对象时只能建SimpleDateFormat对象(抽象类不能建对象,子类重写抽样方法后才可以建对象)

通过DateFormat类可以帮我们完成日期和文本之间的转换。

 

3.2 日期格式

DateFormat是抽象类,我们需要使用其子类SimpleDateFormat来创建对象。

构造方法:

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

 

DateFormat类方法:

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

DateFormat类的作用:即可以将一个Date对象转换为一个符合指定格式的字符串,也可以将一个符合指定格式的字符串转为一个Date对象。

指定格式的具体规则我们可参照SimpleDateFormat类的说明,这里做简单介绍,规则是在一个字符串中,会将以下字母替换成对应时间组成部分,剩余内容原样输出:

  • 当出现y时,会将y替换成年
  • 当出现M时,会将M替换成月
  • 当出现d时,会将d替换成日
  • 当出现H时,会将H替换成时
  • 当出现m时,会将m替换成分
  • 当出现s时,会将s替换成秒

全部的格式如下:

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

 package day16.demo2;

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

 /*
  *  对日期进行格式化 (自定义)
  *    对日期格式化的类 java.text.DateFormat 抽象类, 普通方法,也有抽象的方法
  *    实际使用是子类 java.text.SimpleDateFormat 可以使用父类普通方法,重写了抽象方法
  */
 public class SimpleDateFormatDemo {
 	public static void main(String[] args) {
 		function();
 	}
 	/*
 	 * 如何对日期格式化
 	 *  步骤:
 	 *    1. 创建SimpleDateFormat对象
 	 *       在类构造方法中,写入字符串的日期格式 (自己定义)
 	 *    2. SimpleDateFormat调用方法format对日期进行格式化
 	 *         String format(Date date) 传递日期对象,返回字符串
 	 *    日期模式:
 	 *       yyyy    年份
 	 *       MM      月份
 	 *       dd      月中的天数
 	 *       HH       0-23小时
 	 *       mm      小时中的分钟
 	 *       ss      秒
 	 *       yyyy年MM月dd日 HH点mm分钟ss秒  汉字修改,: -  字母表示的每个字段不可以随便写
 	 */
 	public static void function(){
 		SimpleDateFormat s = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
 		String str = s.format(new Date());
 		System.out.println(str);//2021年01月07日13时31分17秒
 		
 		String str1 = s.format(1777789088L);
 		System.out.println(str1);//1970年01月21日21时49分49秒
 		
 	}
 }

运行结果: 

 Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

 

3.3 DateFormat类常用方法

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

  • format方法,将Date对象转换成String
  • parse方法,将String转换成Date(转换时,该String要符合指定格式,否则不能转换)。

用parse方法有抛出异常的风险,因此日期一般不让用户自己输入,而是用控件选择日期。

package day16.demo2;

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

/*
 *   DateFormat类方法 parse
 *   将字符串解析为日期对象
 *   Date parse(String s) 字符串变成日期对象
 *   String => Date parse
 *   Date => String format
 *   
 */
public class SimpleDateFormatDemo1 {
	public static void main(String[] args) throws Exception{
		function();
	}
	/*
	 *  将字符串转成Date对象
	 *  DateFormat类方法 parse
	 *  步骤:
	 *    1. 创建SimpleDateFormat的对象
	 *       构造方法中,指定日期模式
	 *    2. 子类对象,调用方法 parse 传递String,返回Date
	 *    
	 *    注意: 时间和日期的模式yyyy-MM-dd, 必须和字符串中的时间日期匹配
	 *                     1995-5-6
	 *    
	 *    但是,日期是用户键盘输入, 日期根本不能输入
	 *    用户选择的形式
	 */
	public static void  function() throws ParseException {
		SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
		Date date = s.parse("2005-12-30");
		System.out.println(date);//Fri Dec 30 00:00:00 CST 2005
		
	}
}

 

第四章 Calendar

 

4.1 Calendar类概念

Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。

Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,将语言敏感内容处理好,再返回子类对象。

Calendar类静态方法: 

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

 

Calendar c = Calendar.getInstance();  //返回当前时间
package day16.demo2;
/*
 *   日历类 java.util.Calendar
 *   抽象类,使用他的子类对象
 *   
 *   Calendar类写了静态方法 getInstance() 直接返回了子类的对象
 *   不需要直接new 子类的对象,通过静态方法直接获取
 */
import java.util.Calendar;

public class CalendarDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Calendar c = Calendar.getInstance();
		System.out.println(c);
	}

}

 

4.2 Calendar类常用方法

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

4.2.1 获取日期对象 

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

public int get(int field)   //获取时间字段值,字段参见帮助文档。

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

  • YEAR 年
  • MONTH 月,从0开始算起,最大11;0代表1月,11代表12月。
  • DATE 天
  • HOUR 时
  • MINUTE分
  • SECOND秒

 

 4.2.2 get()方法

package day16.demo3;

import java.util.Calendar;

public class CalendarDemo1 {
	public static void main(String[] args) {
		funtion();
	}
	
	/*
	 * Calendar类的get方法 获取日历字段的值 int get(int) 参数int,获取的哪个日历字段 返回值,就表示日历字段的具体数值
	 */
	public static void funtion() {
		Calendar c = Calendar.getInstance();
		int year = c.get(Calendar.YEAR);
		int month = c.get(Calendar.MONTH)+1;	//2021年1月7日
		//int month = c.get(Calendar.MONTH)				//2021年0月7日
		int day = c.get(Calendar.DAY_OF_MONTH);
		System.out.println(year + "年" + month + "月" + day + "日");
		
	
	}
}

运行结果:

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

 4.2.3 set()方法

	public final void set(int field,int value)//设置指定字段的值
package day16.demo3;

import java.util.Calendar;

public class CalendarDemo1 {
	public static void main(String[] args) {
		function_1();
	}
	
	/*
	 * Calendar类的get方法 获取日历字段的值 int get(int) 参数int,获取的哪个日历字段 返回值,就表示日历字段的具体数值
	 */
	/*
	 * Calendar类的set方法 设置日历 set(int field,int value) field 设置的是哪个日历字段 value
	 * 设置后的具体数值
	 * 
	 * set(int year,int month,int day) 传递3个整数的年,月,日
	 */
	public static void function_1() {
		Calendar c = Calendar.getInstance();
		// 设置,月份,设置到10月分
		// c.set(Calendar.MONTH, 9);

		// 设置年,月,日
		c.set(2021, 10, 1);//2021年11月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 + "日");
	}

}

结果:

Java常用API(十六)——正则表达式、Date类、DateFormat类、Calendar类

 

4.2.4 add()方法

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

代码演示:   

     Calendar c = Calendar.getInstance();

    //修改当前时间为3天后

    c.add(Calendar.DATE, 3);

    //修改当前时间为5小时后

    c.add(Calendar.HOUR, 5);

 

4.2.5 getTime()方法

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

代码演示:

Calendar c = Calendar.getInstance();

Date d = c.getTime();    //Thu Jan 07 15:54:58 CST 2021

各方法演示: 

package day16.demo3;

import java.util.Calendar;
import java.util.Date;

public class CalendarDemo1 {
	public static void main(String[] args) {
		function_3();
	}
	/*
	 * Calendar类的方法getTime()
	 * 把日历对象,转成Date日期对象
	 */
	public static void function_3(){
		Calendar c = Calendar.getInstance();
		Date date = c.getTime();
		System.out.println(date);
	}
	

	/*
	 * Calendar类方法add 日历的偏移量,
	 * 可以指定一个日历中的字段,
	 * 进行整数的偏移 add(int field, int value)
	 */
	public static void function_2() {
		Calendar c = Calendar.getInstance();
		// 让日历中的天数,向后偏移280天
		c.add(Calendar.DAY_OF_MONTH, -280);
		// 获取年份
		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 + "日");
	}

	/*
	 * Calendar类的set方法 设置日历 set(int field,int value) field 设置的是哪个日历字段 value
	 * 设置后的具体数值
	 * 
	 * set(int year,int month,int day) 传递3个整数的年,月,日
	 */
	public static void function_1() {
		Calendar c = Calendar.getInstance();
		// 设置,月份,设置到10月分
		// c.set(Calendar.MONTH, 9);

		// 设置年,月,日
		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 + "日");
	}

	/*
	 * Calendar类的get方法 获取日历字段的值 int get(int) 参数int,获取的哪个日历字段 返回值,就表示日历字段的具体数值
	 */
	public static void funtion() {
		Calendar c = Calendar.getInstance();
		// 获取年份
		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 + "日");
	}
}

 

第五章 日期相关类练习

 

5.1求出自己已经出生多少天

package day16.demo3;

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 strbir = new Scanner(System.in).next();
		//将字符串日期,转成Date对象
		//创建SimpleDateFormat对象,写日期模式
		SimpleDateFormat s = new SimpleDateFormat("yyyy-HH-dd");
		//调用方法parse,字符串转成日期对象
		Date bird = s.parse(strbir);
		
		//获取今天的日期对象
		Date todayd = new Date();
		
		//将两个日期转成毫秒值,Date类的方法getTime
		long bir = bird.getTime();
		long today = todayd.getTime();
		long sec = today-bir;
		
		if(sec<0) {
			System.out.println("还没出生呢");
			
		}
		else
			System.out.println(sec/1000/60/60/24);
		
		
		
		
	}
	
	
}

 

5.2  闰年计算

算法思想:日历设置到指定年份的3月1日,add向前偏移1天,获取天数,29闰年

package day16.demo3;

import java.util.Calendar;

public class DateTest1 {
	public static void main(String[] args) throws Exception {
		function_1();
	}
	/*
	 *  闰年计算
	 *  2000 3000
	 *  高级的算法: 日历设置到指定年份的3月1日,add向前偏移1天,获取天数,29闰年
	 */
	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);
	}
}

 

第六章 总结

正则表达式:用来定义匹配规则,匹配一系列符合某个句法规则的字符串。

正则表达式的常用方法:

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

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

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

 

Date: 日期/时间类

构造方法:

  • public Date()// 系统当前日期时间
  • public Date(long date) 得到一个1970年1月1日 0点这个时间基础上,加上参数date 毫秒值对应的日期时间

方法:

  • public long getTime() 获取日期所对应的毫秒值

 

DateFormat:是日期/时间格式化子类的抽象类, 使用其子类SimpleDateFormat 实例化

构造方法:

  • public SimpleDateFormat() 默认的格式化操作
  • public SimpleDateFormat(String pattern) 按照指定的格式,进行日期格式化

                                    日期和时间模式

                                    y  年 

                                    M  年中的月份 

                                    d  月份中的天数

                                    H  一天中的小时数(0-23)

                                    m  小时中的分钟数

                                    s  分钟中的秒数

                                    S  毫秒数

方法:

  •           public final String format(Date date) 把Date格式化成字符串
  •           public Date parse(String source) 把日期字符串 转换成Date对象

 

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()      //获取该日历对象转成的Date对象

 

 

 

 

 

上一篇:java基础(16):正则表达式、Date、DateFormat、Calendar


下一篇:数据库日期为datetime类型,进行日期的格式化