1.API

1.1 API概述

  • 什么是API

    ​ API (Application Programming Interface) :应用程序编程接口

  • java中的API

    ​ 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。

1.2 键盘录入字符串

1
2
3
4
5
Scanner类 :

next() //遇到了空格, 就不再录入数据了 , 结束标记: 空格, tab键

nextLine() //可以将数据完整的接收过来 , 结束标记: 回车换行符

代码实现 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.itheima.api;

import java.util.Scanner;

public class Demo2Scanner {
/*
nextInt和nextLine方法配合使用的时候, nextLine方法就没有键盘录入的机会了

建议: 今后键盘录入数据的时候, 如果是字符串和整数一起接受, 建议使用next方法接受字符串.
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入整数:");
int num = sc.nextInt(); // 10 + 回车换行后,程序直接就结束了
System.out.println("请输入字符串:");
String s = sc.nextLine();
//String s = sc.next();//改成这个就没有问题了


System.out.println(num);
System.out.println(s);
}
}

image-20220213181941454

2.String类

2.1 String概述

​ 1 String 类在 java.lang 包下,所以使用的时候不需要导包

​ 2 String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象

​ 3 字符串不可变,它们的值在创建后不能被更改

2.2 String类的构造方法

常用的构造方法:

1
2
3
4
5
6
7
public String()	//创建个空白字符串对象,不含有任何内容

public String(char[] chs) //根据字符数组的内容,来创建字符串对象

public String(String original) //根据传入的字符串内容,来创建字符串对象

String s = "abc" //直接赋值的方式创建字符串对象,内容就是abc

示例代码:

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
package com.itheima.string;

public class Demo2StringConstructor {
/*
String类常见构造方法:

public String() : 创建一个空白字符串对象,不含有任何内容
public String(char[] chs) : 根据字符数组的内容,来创建字符串对象
public String(String original) : 根据传入的字符串内容,来创建字符串对象
String s = “abc”; 直接赋值的方式创建字符串对象,内容就是abc

注意:
String这个类比较特殊, 打印其对象名的时候, 不会出现内存地址
而是该对象所记录的真实内容.

面向对象-继承, Object类
*/
public static void main(String[] args) {
// public String() : 创建一个空白字符串对象,不含有任何内容
String s1 = new String();
System.out.println(s1);

// public String(char[] chs) : 根据字符数组的内容,来创建字符串对象
char[] chs = {'a','b','c'};
String s2 = new String(chs);
System.out.println(s2);

// public String(String original) : 根据传入的字符串内容,来创建字符串对象
String s3 = new String("123");
System.out.println(s3);
}
}

2.3 创建字符串对象的区别对比

  • 通过构造方法创建

    ​ 通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同

  • 直接赋值方式创建

    ​ 以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中维护

2.4 字符串的比较

2.4.1 字符串的比较

  • == 比较基本数据类型:比较的是具体的值
  • == 比较引用数据类型:比较的是对象地址值

String类 : public boolean equals(String s) 比较两个字符串内容是否相同、区分大小写

代码 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.itheima.stringmethod;

public class Demo1Equals {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "ABC";
String s3 = "abc";

// equals : 比较字符串内容, 区分大小写
System.out.println(s1.equals(s2));//false
System.out.println(s1.equals(s3));//true

// equalsIgnoreCase : 比较字符串内容, 忽略大小写
System.out.println(s1.equalsIgnoreCase(s2));//true
}
}

2.5 String常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public boolean equals(Object anObject)  //比较字符串的内容,严格区分大小写

public boolean equalsIgnoreCase(String anotherString) //比较字符串的内容,忽略大小写

public int length() //返回此字符串的长度

public char charAt(int index) //返回指定索引处的 char 值

public char[] toCharArray() //将字符串拆分为字符数组后返回

public String substring(int beginIndex, int endIndex) //根据开始和结束索引进行截取,得到新的字符串(包含头,不包含尾)

public String substring(int beginIndex) //从传入的索引处截取,截取到末尾,得到新的字符串

public String replace(CharSequence target, CharSequence replacement) //使用新值,将字符串中的旧值替换,得到新的字符串

public String[] split(String regex) //根据传入的规则切割字符串,得到字符串数组

3.StringBuilder类

3.1 StringBuilder类概述

​ StringBuilder 是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是 StringBuilder 对象中的内容是可变的

3.2 StringBuilder类和String类的区别

  • String类:内容是不可变
  • StringBuilder类:内容是可变

3.3 StringBuilder类的构造方法

常用的构造方法:

1
2
3
public StringBuilder()	//创建一个空白可变字符串对象,不含有任何内容

public StringBuilder(String str) //根据字符串的内容,来创建可变字符串对象

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class StringBuilderDemo01 {
public static void main(String[] args) {
//public StringBuilder():创建一个空白可变字符串对象,不含有任何内容
StringBuilder sb = new StringBuilder();
System.out.println("sb:" + sb); //sb:
System.out.println("sb.length():" + sb.length()); //sb.length():0

//public StringBuilder(String str):根据字符串的内容,来创建可变字符串对象
StringBuilder sb2 = new StringBuilder("hello");
System.out.println("sb2:" + sb2); //sb2:hello
System.out.println("sb2.length():" + sb2.length()); //sb2.length():5
}
}

3.4 StringBuilder常用的成员方法

  • 添加和反转方法
1
2
3
public StringBuilder append(任意类型)	//添加数据,并返回对象本身

public StringBuilder reverse() //返回相反的字符序列
  • 示例代码
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
public class StringBuilderDemo01 {
public static void main(String[] args) {
//创建对象
StringBuilder sb = new StringBuilder();

//public StringBuilder append(任意类型):添加数据,并返回对象本身
StringBuilder sb2 = sb.append("hello");

System.out.println("sb:" + sb); //sb:hello
System.out.println("sb2:" + sb2);//sb2:hello
System.out.println(sb == sb2);//true

sb.append("hello");
sb.append("world");
sb.append("java");
sb.append(100);
//链式编程
sb.append("hello").append("world").append("java").append(100);

System.out.println("sb:" + sb);//sb:hellohelloworldjava100helloworldjava100

//public StringBuilder reverse():返回相反的字符序列
sb.reverse();
System.out.println("sb:" + sb);//sb:001avajdlrowolleh001avajdlrowolleholleh
}
}

3.5StringBuilder和String相互转换

StringBuilder————》String:

1
public String toString()//通过 toString() 就可以实现把 StringBuilder 转换为 String

String————》StringBuilder:

1
public StringBuilder(String s)//通过构造方法就可以实现把 String 转换为 StringBuilder

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class StringBuilderDemo02 {
public static void main(String[] args) {

//StringBuilder 转换为 String
StringBuilder sb1 = new StringBuilder();
sb1.append("hello");
//String s1 = sb; //这个是错误的做法
//public String toString():通过 toString() 就可以实现把 StringBuilder 转换为 String
String s1 = sb1.toString();
System.out.println(s1); //hello

//String 转换为 StringBuilder
String s2 = "hello";
//StringBuilder sb = s; //这个是错误的做法
//public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder
StringBuilder sb2 = new StringBuilder(s2);
System.out.println(sb2); //hello

}
}

4.Math类

1、Math类概述:包含执行基本数字运算的方法

2、Math中方法的调用方式:Math类中无构造方法,但内部的方法都是静态的,可以通过 类名.方法名进行调用

3、Math类的常用方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static int abs(int a)	//返回参数的绝对值

public static double ceil (double a) //返回大于或等于参数的最小 double值,等于ー个整数

public static double floor(double a) //返回小于或等于参数的最大 double值,等于一个整数

public static int round(float a) //按照四舍五入返回最接近参数的int

public static int max(int a, int b) //返回两个int值中的较大值

public static int min(int a, int b) //返回两个int值中的较小值

public static double pow( double a, double b) //返回a的b次幂的值

public static double random() //返回值为 double的正值,[0.0,1.0)

5.System类

System类的常用方法

1
2
3
4
5
public static void exit(int status)		//终止当前运行的Java虚拟机,非零表示异常终止

public static long currentTimeMillis() //返回当前时间(以毫秒为单位)

public static void arraycopy(数据源数组, 起始索引, 目的地数组, 起始索引, 拷贝个数) //数组copy

6.Object类

Object 是所有类的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类,换句话说,该类所具备的方法,所有类都会有一份。

6.1 toString方法

为了能以良好的格式,更方便的展示对象中的属性值,通常会在类中重写方法,把展示地址变为展示属性。

原始方法:

toString方法的源码分析

重写后:

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
class Student extends Object {
private String name;
private int age;

public Student() {
}

public Student(String name, int age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class ObjectDemo {
public static void main(String[] args) {
Student s = new Student();
s.setName("林青霞");
s.setAge(30);
System.out.println(s);
System.out.println(s.toString());
}
}

运行结果:

1
2
Student{name='林青霞', age=30}
Student{name='林青霞', age=30}

6.2 equals方法

重写equals方法的场景:不希望比较对象的地址值,想要结合对象属性进行比较的时候

原始方法:

1
2
3
public boolean equals(Object obj) {
return (this == obj);//比的是地址值
}
  • 示例代码:
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
class Student {
private String name;
private int age;

public Student() {
}

public Student(String name, int age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public boolean equals(Object o) {
//this -- s1
//o -- s2
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

Student student = (Student) o; //student -- s2

if (age != student.age) return false;
return name != null ? name.equals(student.name) : student.name == null;
}
}
public class ObjectDemo {
public static void main(String[] args) {
Student s1 = new Student();
s1.setName("林青霞");
s1.setAge(30);

Student s2 = new Student();
s2.setName("林青霞");
s2.setAge(30);

//需求:比较两个对象的内容是否相同
System.out.println(s1.equals(s2));
//重写了equals,就是true
//没重写,比的就是地址,返回false
}
}
  • 面试题

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class InterviewTest {
    public static void main(String[] args) {
    String s1 = "abc";
    StringBuilder sb = new StringBuilder("abc");
    //此时调用的是String类中的equals方法。
    //虽然String重写了equals方法,但方法中写了,若参数不是字符串,则直接fals;若参数是字符串才进行内容比较
    System.out.println(s1.equals(sb)); // false

    //StringBuilder类中是没有重写equals方法,用的就是Object类中的,比的就是地址值
    System.out.println(sb.equals(s1)); // false
    }
    }

6.3 其他方法

1
2
3
4
5
6
7
public static String toString(对象)	//返回参数中对象的字符串表示形式。

public static String toString(对象, 默认字符串) //返回对象的字符串表示形式。如果对象为空,那么返回第二个参数.

public static Boolean isNull(对象) //判断对象是否为空

public static Boolean nonNull(对象) //判断对象是否不为空

7.BigDecimal类

作用:可以用来进行精确计算

构造方法

1
2
3
BigDecimal(double val)	//参数为double

BigDecimal(String val) //参数为String

常用方法

1
2
3
4
5
6
7
8
9
10
11
12
public BigDecimal add(另一个BigDecimal对象)	//加法

public BigDecimal subtract (另一个BigDecimal对象) //减法

public BigDecimal multiply (另一个BigDecimal对象) //乘法

public BigDecimal divide (另一个BigDecimal对象) //除法

public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式) //除法
// BigDecimal.ROUND_UP 进一法
// BigDecimal.ROUND_FLOOR 去尾法
// BigDecimal.ROUND_HALF_UP 四舍五入

8.包装类

8.1 基本类型包装类

基本类型包装类的作用:将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据

常用的操作之一:用于基本数据类型与字符串之间的转换

基本类型对应的包装类:

基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

8.2 自动拆箱和自动装箱

自动装箱:把基本数据类型转换为对应的包装类类型

自动拆箱:把包装类类型转换为对应的基本数据类型

示例代码:

1
2
Integer i = 100;  // 自动装箱
i += 200; // i = i + 200; i + 200 自动拆箱;i = i + 200; 是自动装箱

8.3 Integer类

Integer类概述:包装一个对象中的原始类型 int 的值

Integer类构造方法:

1
2
3
4
5
6
7
public Integer(int value)	//根据int值创建Integer对象(过时)

public Integer(String s) //根据String值创建Integer对象(过时)

public static Integer valueOf(int i) //返回表示指定的int值的Integer实例

public static Integer valueOf(String s) //把String转为Integer类型

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class IntegerDemo {
public static void main(String[] args) {
//public Integer(int value):根据 int 值创建 Integer 对象(过时)
Integer i1 = new Integer(100);
System.out.println(i1);

//public Integer(String s):根据 String 值创建 Integer 对象(过时)
Integer i2 = new Integer("100");
// Integer i2 = new Integer("abc"); //NumberFormatException
System.out.println(i2);
System.out.println("--------");

//public static Integer valueOf(int i):返回表示指定的 int 值的 Integer 实例
Integer i3 = Integer.valueOf(100);
System.out.println(i3);

//public static Integer valueOf(String s):返回一个保存指定值的Integer对象 String
Integer i4 = Integer.valueOf("100");
System.out.println(i4);
}
}

8.4int和String类型的相互转换

8.4.1 int转换为String

转换方式:

  • 方式一:直接在数字后加一个空字符串
  • 方式二:通过String类静态方法valueOf()

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class IntegerDemo {
public static void main(String[] args) {
//int ---> String
int number = 100;

//方式1
String s1 = number + "";
System.out.println(s1);

//方式2
//public static String valueOf(int i)
String s2 = String.valueOf(number);
System.out.println(s2);
}
}

8.4.2 String转换为int

转换方式:

  • 方式一:先将字符串数字转成Integer,再调用valueOf()方法
  • 方式二:通过Integer静态方法parseInt()进行转换

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class IntegerDemo {
public static void main(String[] args) {
//String ---> int
String s = "100";

//方式1:String --- Integer --- int
Integer i = Integer.valueOf(s);
//public int intValue()
int x = i.intValue();
System.out.println(x);

//方式2
//public static int parseInt(String s)
int y = Integer.parseInt(s);
System.out.println(y);
}
}

9.Arrays类

常用方法:

1
2
3
4
5
public static String toString(int[] a)	//返回指定数组的内容的字符串表示形式

public static void sort(int[] a) //按照数字顺序排列指定的数组

public static int binarySearch(int[] a, int key) //利用二分查找返回指定元素的索引

10.时间日期类

10.1 Date类

计算机中时间原点:1970年1月1日 00:00:00

时间换算单位:1秒 = 1000毫秒

Date类概述:Date 代表了一个特定的时间,精确到毫秒

10.1.1 Date类构造方法

1
2
public Date()	//分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
public Date(long date) //分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class DateDemo01 {
public static void main(String[] args) {
//public Date():分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
Date d1 = new Date();
System.out.println(d1);
//Sun Feb 13 21:16:31 CST 2022 此时的时间

//public Date(long date):分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
long date = 1000*60*60;
Date d2 = new Date(date);
System.out.println(d2);
//Thu Jan 01 09:00:00 CST 1970 从时间原点往后算data微秒的时刻
}
}

10.1.2 常用方法

1
2
3
public long getTime()	//获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值

public void setTime(long time) //设置时间,给的是毫秒值

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class DateDemo02 {
public static void main(String[] args) {
//创建日期对象
Date d = new Date();

//public long getTime():获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值
System.out.println(d.getTime()); //1644758475285
System.out.println(d.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365 + "年");
//52.15494911482116年

//public void setTime(long time):设置时间,给的是毫秒值
long time = System.currentTimeMillis();
d.setTime(time); //Sun Feb 13 21:21:15 CST 2022

System.out.println(d);
}
}

10.2 SimpleDateFormat类

概述:SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。

构造方法:

1
2
3
public SimpleDateFormat()	//构造一个SimpleDateFormat,使用默认模式和日期格式

public SimpleDateFormat(String pattern) //构造一个SimpleDateFormat使用给定的模式和默认的日期格式

常用方法:

1
2
3
4
5
//格式化(从Date到String)
public final String format(Date date) //将日期格式化成日期/时间字符串

//解析(从String到Date)
public Date parse(String source) //从给定字符串的开始解析文本以生成日期

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class SimpleDateFormatDemo {
public static void main(String[] args) throws ParseException {
Date d = new Date();

//格式化:从 Date 到 String
// SimpleDateFormat sdf = new SimpleDateFormat();//2022/2/13 下午9:28
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//2022年02月13日 21:28:53
String s = sdf.format(d);
System.out.println(s);

//解析:从 String 到 Date
String ss = "2048-08-09 11:11:11";
//ParseException
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dd = sdf2.parse(ss);
System.out.println(dd);//Sun Aug 09 11:11:11 CST 2048

}
}

10.3 JDK8时间日期类

  • LocalDate 表示日期(年月日)
  • LocalTime 表示时间(时分秒)
  • LocalDateTime 表示时间+ 日期 (年月日时分秒)

10.3.1 LocalDateTime创建方法

方法说明:

1
2
3
public static LocalDateTime now()	//获取当前系统时间

public static LocalDateTime of(年,月,日,时,分,秒) //使用指定年月日和时分秒初始化一个LocalDateTime对象

示例代码:

1
2
3
4
5
6
7
8
9
public class JDK8DateDemo2 {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
System.out.println(now);//2022-02-13T22:36:17.005158

LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 11, 11, 11);
System.out.println(localDateTime);//2020-11-11T11:11:11
}
}

10.3.2 LocalDateTime获取方法

方法说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
public int getYear()	//获取年

public int getMonthValue() //获取月份(1-12)

public int getDayofMonth() //获取月份中的第几天(1-31)

public int getDayofYeara() //获取一年中的第几天(1-366)

public DayofWeek getDayofWeek() //获取星期

public int getMinute() //获取分钟

public int getHour() //获取小时

示例代码:

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
public class JDK8DateDemo3 {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 11, 11, 20);
//public int getYear() 获取年
int year = localDateTime.getYear();
System.out.println("年为" +year);//年为2020

//public int getMonthValue() 获取月份(1-12)
int month = localDateTime.getMonthValue();
System.out.println("月份为" + month);//月份为11

Month month1 = localDateTime.getMonth();
System.out.println(month1);//NOVEMBER

//public int getDayOfMonth() 获取月份中的第几天(1-31)
int day = localDateTime.getDayOfMonth();
System.out.println("日期为" + day);//日期为11

//public int getDayOfYear() 获取一年中的第几天(1-366)
int dayOfYear = localDateTime.getDayOfYear();
System.out.println("这是一年中的第" + dayOfYear + "天");//这是一年中的第316天

//public DayOfWeek getDayOfWeek()获取星期
DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();
System.out.println("星期为" + dayOfWeek);//星期为WEDNESDAY

//public int getMinute() 获取分钟
int minute = localDateTime.getMinute();
System.out.println("分钟为" + minute);//分钟为11

//public int getHour() 获取小时
int hour = localDateTime.getHour();
System.out.println("小时为" + hour);//小时为11
}
}

10.3.3 LocalDateTime转换方法

方法说明:

1
2
3
public LocalDate  toLocalDate ()	//转换成为一个LocalDate对象

public LocalTime toLocalTime () //转换成为一个LocalTime对象

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class JDK8DateDemo4 {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.of(2020, 12, 12, 8, 10, 12);

//public LocalDate toLocalDate () 转换成为一个LocalDate对象
LocalDate localDate = localDateTime.toLocalDate();
System.out.println(localDate);//2020-12-12

//public LocalTime toLocalTime () 转换成为一个LocalTime对象
LocalTime localTime = localDateTime.toLocalTime();
System.out.println(localTime);//08:10:12

}
}

10.3.4 LocalDateTime格式化和解析

方法说明:

1
2
3
4
5
public String format (指定格式)	//把一个LocalDateTime格式化成为一个字符串

public LocalDateTime parse (准备解析的字符串, 解析格式) //把一个日期字符串解析成为一个LocalDateTime对象

public static DateTimeFormatter ofPattern(String pattern) //使用指定的日期模板获取一个日期格式化器DateTimeFormatter对象

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class JDK8DateDemo5 {
public static void main(String[] args) {
//method1();
//method2();
}

private static void method1() {
//public String format (指定格式) 把一个LocalDateTime格式化成为一个字符串
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 12, 13, 14, 15);
System.out.println(localDateTime);//2020-11-12T13:14:15
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
String s = localDateTime.format(pattern);
System.out.println(s);//2020年11月12日 13:14:15
}

private static void method2() {
//public static LocalDateTime parse (准备解析的字符串, 解析格式) 把一个日期字符串解析成为一个LocalDateTime对象
String s = "2020年11月12日 13:14:15";
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
LocalDateTime parse = LocalDateTime.parse(s, pattern);
System.out.println(parse);//2020-11-12T13:14:15
}

}

10.3.5 LocalDateTime增加或者减少时间的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
public LocalDateTime plusYears (long years)	//添加或者减去年

public LocalDateTime plusMonths(long months) //添加或者减去月

public LocalDateTime plusDays(long days) //添加或者减去日

public LocalDateTime plusHours(long hours) //添加或者减去时

public LocalDateTime plusMinutes(long minutes) //添加或者减去分

public LocalDateTime plusSeconds(long seconds) //添加或者减去秒

public LocalDateTime plusWeeks(long weeks) //添加或者减去周

10.3.6 LocalDateTime减少或者增加时间的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
public LocalDateTime minusYears (long years)	//减去或者添加年

public LocalDateTime minusMonths(long months) //减去或者添加月

public LocalDateTime minusDays(long days) //减去或者添加日

public LocalDateTime minusHours(long hours) //减去或者添加时

public LocalDateTime minusMinutes(long minutes) //减去或者添加分

public LocalDateTime minusSeconds(long seconds) //减去或者添加秒

public LocalDateTime minusWeeks(long weeks) //减去或者添加周

10.3.7 LocalDateTime修改方法

1
2
3
4
5
6
7
8
9
10
11
12
13
public LocalDateTime withYear(int year)	//直接修改年

public LocalDateTime withMonth(int month) //直接修改月

public LocalDateTime withDayOfMonth(int dayofmonth) //直接修改日期(一个月中的第几天)

public LocalDateTime withDayOfYear(int dayOfYear) //直接修改日期(一年中的第几天)

public LocalDateTime withHour(int hour) //直接修改小时

public LocalDateTime withMinute(int minute) //直接修改分钟

public LocalDateTime withSecond(int second) //直接修改秒

10.4 Period类

方法说明:

1
2
3
4
5
6
7
8
9
public static Period between(开始时间,结束时间)	//计算两个“时间"的间隔

public int getYears() //获得这段时间的年数

public int getMonths() //获得此期间的总月数

public int getDays() //获得此期间的天数

public long toTotalMonths() //获取此期间的总月数

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* 计算两个时间的间隔
*/
public class JDK8DateDemo9 {
public static void main(String[] args) {
//public static Period between(开始时间,结束时间) 计算两个"时间"的间隔

LocalDate localDate1 = LocalDate.of(2020, 1, 1);
LocalDate localDate2 = LocalDate.of(2048, 12, 12);
Period period = Period.between(localDate1, localDate2);
System.out.println(period);//P28Y11M11D

//public int getYears() 获得这段时间的年数
System.out.println(period.getYears());//28
//public int getMonths() 获得此期间的月数
System.out.println(period.getMonths());//11
//public int getDays() 获得此期间的天数
System.out.println(period.getDays());//11

//public long toTotalMonths() 获取此期间的总月数
System.out.println(period.toTotalMonths());//347

}
}

10.5 Duration类

方法说明:

1
2
3
4
5
6
7
public static Durationbetween(开始时间,结束时间)	//计算两个“时间"的间隔

public long toSeconds() //获得此时间间隔的秒

public int toMillis() //获得此时间间隔的毫秒

public int toNanos() //获得此时间间隔的纳秒

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* 计算两个时间的间隔
*/
public class JDK8DateDemo10 {
public static void main(String[] args) {
//public static Duration between(开始时间,结束时间) 计算两个“时间"的间隔

LocalDateTime localDateTime1 = LocalDateTime.of(2020, 1, 1, 13, 14, 15);
LocalDateTime localDateTime2 = LocalDateTime.of(2020, 1, 2, 11, 12, 13);
Duration duration = Duration.between(localDateTime1, localDateTime2);
System.out.println(duration);//PT21H57M58S
//public long toSeconds() 获得此时间间隔的秒
System.out.println(duration.toSeconds());//79078
//public int toMillis() 获得此时间间隔的毫秒
System.out.println(duration.toMillis());//79078000
//public int toNanos() 获得此时间间隔的纳秒
System.out.println(duration.toNanos());//79078000000000
}
}