java学习day11--Date类,Calendar类,集合1

一.Date类

表示日期格式,精确到毫秒,比较常用的:获取当前的系统时间,以Date格式来表现的

重点:Date和String之间的相互转化,需要用到DateFormat这个抽象类的子类SimpleDateFormat

Date--->String        格式化

步骤:1.创建Date类型的对象

           2.创建SimpleDateFormat类型的对象,并指定格式

           3.调用SimpleDateFormat对象的format方法,将Date对象作为参数传入

public class DateTest {
	public static void main(String[] args) throws ParseException {	
		Date date = new Date() ;	
		SimpleDateFormat simpleDateFormat  = new SimpleDateFormat("yyyy-MM-dd") ;
		String dateStr = simpleDateFormat.format(date) ;
		System.out.println("dateStr:"+dateStr);
		
		//String--->Date:解析
		//定义日期文本格式
		String str = "2019-10-1" ;
		
		//创建SimpleDateFormat对象
		/**
		 * 注意:
		 * 	当需要将文本日期格式转换称Date格式:文本格式的格式 必须和SimpleDateFormat模式一致,
		 * 					否则无法解析!出现ParseException
		 */
		SimpleDateFormat simpleDateFormat2  = new SimpleDateFormat("yyyy-MM-dd") ;
		//解析
		Date date2 = simpleDateFormat2.parse(str) ;
		System.out.println("date2:"+date2);//Tue Oct 01 00:00:00 CST 2019
	}
}

String--->Date    解析     会抛出异常ParseException

步骤:1.定义一个String文本格式str

           2.创建SimpleDateFormat类型的对象,并指定格式,注意格式应该和String类型文本格式一致,否则无法解析

           3.调用SimpleDateFormat对象的parse方法,并将str作为参数传入,返回一个Date类型

public class DateTest {
	public static void main(String[] args) throws ParseException {	
		String str = "2019-10-1" ;
		SimpleDateFormat simpleDateFormat2  = new SimpleDateFormat("yyyy-MM-dd") ;
		Date date2 = simpleDateFormat2.parse(str) ;
		System.out.println("date2:"+date2);
	}
}

练习,键盘输入出生年月日,测试来到这个世界多少天了

package 临时练习;

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

public class Test {
	public static void main(String[] args) throws ParseException {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入你的出生年月日:");
		String birth = scanner.nextLine();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = sdf.parse(birth);
		long birthTime = date.getTime();
		long nowTime = System.currentTimeMillis();
		long day = (nowTime - birthTime)/1000/60/60/24;
		System.out.println(day);
	}
}

二.Calendar类

这是一个抽象类,与特定字段之间转换提供了一些方法,并为操作日历字段提供类一些方法,不能实例化

       public int get(int field):  返回给定日历字段的值

       public static final int YEAR:年

       public static final int MONTH:月

       public static final int DATE:日 

里面常用的两个方法

       public abstract void add(int field, int amount):  给当前日历类的某个字段设置时间偏移量(-/+)

       public final void set(int year, int mouth, int date)  设置日历字段 YEAR, MONTH, DAY_OF_MONTH的值

练习:随意输入一个年份,查询那年的二月份有多少天

import java.util.Calendar;
import java.util.Scanner;

public class CalendarTest {	
	public static void main(String[] args) {
		//1)创建键盘录入对象
		Scanner scanner = new Scanner(System.in) ;		
		//2)接收数据
		System.out.println("请输入任意年份:");
		int year = scanner.nextInt() ;		
		//3)创建Calendar类对象
		Calendar calendar = Calendar.getInstance() ;		
		//4)设置时间
		calendar.set(year, 2, 1); //其实时间:3月1日		
		//5)把时间往前推一天即可
		calendar.add(calendar.DATE, -1);		
		//输出
		System.out.println("2月份有"+calendar.get(calendar.DATE)+"天");
	}
}

三.集合(初)

集合的继承关系图

集合和数组的区别?

        1.数组的长度是固定的,集合的长度是可变的

        2.数组既可以储存基本数据类型,还可以储存引用数据类型,而集合只能存储引用数据类型

        3.数组中的元素必须是同一类型的,而集合中可以储存多个类型的元素

集合的常用方法:
         boolean add(Object e):添加单个元素
         boolean addAll(Collection c):添加一个集合中的元素
         void clear()     暴力删除,不推荐使用
         remove(Object o)        删除一个元素
         removeAll(Collection c):    移除一个集合中的元素,只要移除一个就算是移除成功
         boolean contains(Object o):      一个集合中是否包含指定的元素
         boolean containsAll(Collection c):     包含一个集合中的元素,包含所有元素才算是包含
         boolean isEmpty():    判断集合是否为空. 空,就是true
         int size():     获取元素数的方法
         Iterator iterator():迭代器  (遍历集合的特有功能)
         Object[] toArray() :将集合转换成数组
         boolean retainAll(Collection c) :思考假设A集合对B集合取交集,交集的元素进入前一个集合,返回之后如果前一个集合改变                             返回true,否则返回false

迭代器:Iterate

源码:

public interface Iterable{
	Iterator<T> iterator();
}
//接口
interface Iterator{
	boolean hasNext() ;
	Object next() ;
}

interface Collection{
}

interface List extends Collection{	
}

class ArrayList implements List{
	  public Iterator<E> iterator() {
          return new Itr(); //匿名对象:Itr
   	  }   	  
   	  
   	  //内部类:Itr
   	  private class Itr implements Iterator<E> {
   	      //判断是否有下一个元素
   	   	  public boolean hasNext() {
              return cursor != size;
          }
        	
        	//获取下一个迭代的元素
        	public E next() {
       		}
   	   }
}

两个方法:hasNext()    判断是否还有下一个元素

                  next()   得到下一个元素

练习:创建一个学生类,将学生类对象添加到集合中,并用迭代器的方法输出

class Student {
	private String name;
	private int age ;
	
    无参构造;
	有参构造;
	set/get方法;
    重写的toString方法;
}

public class Test {
	public static void main(String[] args) {
		
		//1)创建集合对象
		Collection collection = new ArrayList() ;
		
		//2)创建学生对象
		Student student1 = new Student("Lucy", 19) ;
		Student student2 = new Student("Jack", 21) ;
		Student student3 = new Student("Mary", 20) ;
		
		//3)添加
		collection.add(student1);
		collection.add(student2);
		collection.add(student3);
		
		//4)获取迭代器
		Iterator it = collection.iterator() ;
		//5)遍历
		while(it.hasNext()) {
			//转换
			Student student = (Student)it.next() ;
			System.out.println(student.getName()+"---"+student.getAge());
		}
	}
}

猜你喜欢

转载自blog.csdn.net/szy2333/article/details/81319374