Date类

  • 基本概念

    java.util.Date类主要用于描述特定的瞬间,可以精确到毫秒。

  • 常用的方法

    Date() - 根据当前系统时间来构造对象。

    Date(long date) - 根据参数指定的毫秒数构造对象,返回的是距离标准时间参数指定毫秒数的时间点。

    long getTime() - 获取当前系统表示的时间距离标准时间的毫秒数。

    void setTime(long time) - 设置时间对象变为距离标准时间参数指定毫秒数的时间点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
// 1.使用无参方式构造Date对象并打印
Date d1 = new Date();
System.out.println("d1 = " + d1); //Wed Oct 30 11:22:46 CST 2019
System.out.println("----------------------------");

// 2.使用有参方式构造Date对象并打印 1000毫秒 = 1秒
Date d2 = new Date(1000);
System.out.println("d2 = " + d2); //Thu Jan 01 08:00:01 CST 1970
System.out.println("----------------------------");

// 3.获取当前调用对象距离标准时间的毫秒数
long msec = d1.getTime();
System.out.println("msec = " + msec); // 1572405766784
System.out.println("----------------------------");

// 4.设置当前调用对象距离标准时间为参数指定的毫秒数
d1.setTime(2000);
System.out.println("d1 = " + d1); //Thu Jan 01 08:00:02 CST 1970 -> 1970.1.1 08:00:02
}
}

SimpleDateFormat类

  • 基本概念

    java.text.SimpleDateFormat类主要用于实现日期和文本之间的转换。

  • 常用的方法

    SimpleDateFormat(String pattern) - 根据参数指定的字符串模式构造对象。
    y代表年 M代表月 d代表日 H代表时 m代表分 s代表秒

    String format(Date date) - 用于实现日期类型向文本类型的转换。

    Date parse(String source) - 用于实现文本到日期的转换。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatTest {
public static void main(String[] args) throws ParseException {
// 1.构造Date类型的对象并打印出来
Date d1 = new Date();
System.out.println("d1 = " + d1);
System.out.println("-------------------------");

// 2.构造SimpleDateFormat类型的对象进行格式的调整
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str1 = sdf.format(d1);
System.out.println("转换后的格式为:" + str1);
Date d2 = sdf.parse(str1);
System.out.println("d2 = " + d2);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class BirthDayTest {
public static void main(String[] args) throws ParseException {
// 1.提示用户按照指定的格式输入生日信息并使用变量记录
System.out.println("请输入您的生日信息:(xxxx年xx月xx日)");
Scanner sc = new Scanner(System.in);
String str1 = sc.next();

// 2.根据输入的生日信息计算出距离1970年1月1日的天数并使用变量记录
// 2.1 将用户输入的文本信息转换为日期信息
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
Date d1 = sdf.parse(str1);
// 2.2 计算该日期信息距离1970年1月1日的毫秒数
long msec = d1.getTime();
// 2.3 根据毫秒数计算天数
long day = (msec / 1000 / 3600 + 8) / 24;

// 3.打印最终的计算结果
System.out.println("您的生日距离1970年1月1日已经过去" + day + "天了!");
}
}

Calendar类

  • 基本概念

    java.util.Calendar类主要用于取代Date类描述特定的瞬间。

  • 常用的方法

    static Calendar getInstance() - 用于获取Calendar类型的引用。

    void set(int year, int month, int date, int hourOfDay, int minute, int second) - 用于设置年月日时分秒信息。

    Date getTime() - 用于实现从Calendar类型向Date类型的转换。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class CalendarTest {
public static void main(String[] args) {
// 1.使用过时的方法来构造对象并打印
Date d1 = new Date(2008-1900, 8-1, 8, 20, 8, 8);
System.out.println(d1); //Fri Aug 08 20:08:08 CST 2008
// 调整格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(d1)); //2008-08-08 20:08:08
System.out.println("------------------------------------");

// 2.使用取代的方式来构造对象并打印
// 2.1 获取Calendar类型的引用
// 思考:既然Calendar是个抽象类不能new对象,为啥下面的方法可以得到
// Calender类型的引用呢???
// 解析:return new GregorianCalendar(zone, aLocale);
// 该方法的返回值类型虽然是Calendar类型,但实际返回该类类型子类
// 的对象,形成了多态,多态的使用场合之三
Calendar c1 = Calendar.getInstance();
// 2.2 调用set方法设置年月日时分秒
c1.set(2008, 8-1, 8, 20, 8, 8);
// 2.3 转换为Date类型
Date d2 = c1.getTime();
System.out.println(sdf.format(d2));//2008-08-08 20:08:08
}
}
  • 复习:

    当需要在程序中记录单个数据内容时,则声明一个变量记录即可;

    当需要在程序中记录多个类型相同的数据内容时,则声明一个一维数组记录即可;

    当需要在程序中记录多个类型不同的数据内容时,则构造一个对象记录即可;

    当需要在程序中记录多个类型相同的对象时,则声明一个对象数组记录即可;

    当需要在程序中记录多个类型不同的对象时,则声明一个集合记录即可;

    在Java语言中用于描述集合的顶层框架:Collection集合 和 Map集合。

Collection集合

在以后的开发中很少直接使用Collection集合,而是更多地使用Collection集合的子集合:List集合、Queue集合以及Set集合。

  • collection集合的常用方法

    boolean add(E e) - 向集合中添加对象.

    boolean contains(Object o) - 判断是否包含指定对象.

    boolean remove(Object o) - 从集合中删除对象.

    void clear() - 清空集合

    int size() - 返回包含对象的个数.

    boolean isEmpty() - 判断是否为空.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.util.*;
public class CollectionTest {
public static void main(String[] args) {
// 1.声明Collection类型的引用指向实现类的对象
//Collection c1 = new Collection(); error 接口不能创建对象
// 接口类型的引用指向实现类的对象,形成了多态
Collection c1 = new ArrayList();

// 2.调用成员方法实现元素的添加
boolean b1 = c1.add(new String("one"));
System.out.println("b1 = " + b1); // true
// 自动调用toString方法,最终调用ArrayList类中的toString方法
// 默认格式:[元素值1, 元素值2, ...]
System.out.println("c1 = " + c1); // [one]

b1 = c1.add(new Integer(2));
System.out.println("b1 = " + b1); // true
System.out.println("c1 = " + c1); // [one, 2]

b1 = c1.add(new Student(1001, "zhangfei", 30));
System.out.println("b1 = " + b1); // true
// [one, 2, Student [id=1001, name=zhangfei, age=30]]
// 当打印集合中的所有元素时,本质上就是调用各个元素对应类中的toSring
System.out.println("c1 = " + c1);

System.out.println("-----------------------------------");
// 3.实现元素的查找
b1 = c1.contains(new Integer(1));
System.out.println("b1 = " + b1); // false
b1 = c1.contains(new Integer(2));
System.out.println("b1 = " + b1); // true
// contains方法的工作原理:(o==null ? e==null : o.equals(e))
// 若参数对象为空,则只需要查找当前集合中是否有元素为空即可;
// 若参数对象不为空,则使用参数对象调用equals方法与集合中元素依次比较
b1 = c1.contains(new Student(1001, "zhangfei", 30));
// 当Student类中没有重写equals方法时,这里调用继承的版本 比较地址 false
// 当Student类中重写equals方法后,这里调用重写的版本 比较内容 true
System.out.println("b1 = " + b1); // false true

System.out.println("-----------------------------------");
// 4.实现元素的删除
// [one, 2, Student [id=1001, name=zhangfei, age=30]]
b1 = c1.remove(new String("one"));
System.out.println("b1 = " + b1); // true
// [2, Student [id=1001, name=zhangfei, age=30]]
System.out.println("c1 = " + c1);

b1 = c1.remove(new String("two"));
System.out.println("b1 = " + b1); // false
// [2, Student [id=1001, name=zhangfei, age=30]]
System.out.println("c1 = " + c1);

c1.clear();
System.out.println("c1 = " + c1); // [啥也没有]

System.out.println("-----------------------------------");
// 5.获取集合中元素的个数以及判断是否为空
System.out.println("集合中元素的个数是:" + c1.size()); // 0
System.out.println((0 == c1.size() ? "集合已经空了": "集合还没有空"));
System.out.println(c1.isEmpty()? "集合已经空了": "集合还没有空");
}
}