13、可变字符串类和日期相关类

1 可变字符串类(重点)

1.1 基本概念

由于String类描述的字符串内容是个常量不可改变,当需要在Java代码中描述大量类似的字符串时,
只能单独申请和存储,此时会造成内存空间的浪费。为了解决上述问题,
可以使用java.lang.StringBuilder类和java.lang.StringBuffer类来描述字符序列可以改变的字符串,
	如:"ab"。 
StringBuffer类是从jdk1.0开始存在,属于线程安全的类,因此效率比较低。 
StringBuilder类是从jdk1.5开始存在,属于非线程安全的类,效率比较高。

1.2、StringBuilder类常用的构造方法

在这里插入图片描述

1.3、StringBuilder类常用的成员方法

在这里插入图片描述

注意 
作为参数传递的话,方法内部String不会改变其值,StringBuffer和StringBuilder会改变其值。

1.4、返回值的设计

StringBuilder的很多方法的返回值均为StringBuilder类型。
	这些方法的返回语句均为:return this。
由此可见,这些方法在对StringBuilder所封装的字符序列进行改变后又返回了该对象的引用。
基于这样设计的目的在于可以连续调用。

2、Java8之前的日期相关类(熟悉)

2.1、System类的概述

(1)基本概念

Java.lang.System类中提供了一些有用的类字段和方法。

(2)常用的方法

在这里插入图片描述

2.2、Date类的概述

(1)基本概念

java.util.Date类主要用于描述特定的瞬间,也就是年月日时分秒,可以精确到毫秒。

(2)常用的方法

在这里插入图片描述

2.3、SimpleDateFormat类的概述

(1)基本概念

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

(2)常用的方法

在这里插入图片描述

2.4、Calendar类的概述

(1)基本概念

java.util.Calender类主要用于描述特定的瞬间,取代Date类中的过时方法实现全球化。 
该类是个抽象类,因此不能实例化对象,其具体子类针对不同国家的日历系统,
其中应用最广泛的是GregorianCalendar(格里高利历),对应世界上绝大多数国家/地区使用的标准日历系统。

(2)常用的方法

在这里插入图片描述

3、Java8中的日期相关类(熟悉)

3.1 Java8日期类的由来

JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了。
而Calendar并不比Date好多少。它们面临的问题是:
	Date类中的年份是从1970开始的,而月份都从0开始。 
	格式化只对Date类有用,对Calendar类则不能使用。
	非线程安全等。

3.2 Java8日期类的概述

Java 8通过发布新的Date-Time API来进一步加强对日期与时间的处理。 
java.time包:该包日期/时间API的基础包。 
java.time.chrono包:该包提供对不同日历系统的访问。 
java.time.format包:该包能够格式化和解析日期时间对象。 
java.time.temporal包:该包包含底层框架和扩展特性。 
java.time.zone包:该包支持不同时区以及相关规则的类。

3.3 LocalDate类的概述

(1)基本概念

java.time.LocalDate类主要用于描述年-月-日格式的日期信息,该类不表示时间和时区信息。

(2)常用的方法

在这里插入图片描述

// 只能表示  年月日
LocalDate now = LocalDate.now(); // 获取当前时间
System.out.println(now);

// 表示指定时间
LocalDate date = LocalDate.of(2020, 12, 20);
System.out.println(date);


int year = date.getYear();// 获取年份
Month month = date.getMonth(); // 获取月份 英文
int m = date.get(ChronoField.MONTH_OF_YEAR);// 获取月份  int
int dayOfMonth = date.getDayOfMonth(); // 获取日期
System.out.println(year + "/" + month + "/" + dayOfMonth);
System.out.println(year + "/" + m + "/" + dayOfMonth);

3.4 LocalTime类的概述

(1)基本概念

java.time.LocalTime 类主要用于描述时间信息,可以描述时分秒以及纳秒。

(2)常用的方法

在这里插入图片描述

LocalTime now = LocalTime.now(); // 获取系统当前时间
System.out.println(now);
// 查看可用的时区
Set<String> zoneIds = ZoneId.getAvailableZoneIds();
System.out.println(zoneIds);
// 获取指定时区的时间
LocalTime now1 = LocalTime.now(ZoneId.of("America/Marigot"));
System.out.println(now1);
LocalTime time = LocalTime.of(10, 30, 40); // 表示指定时间
System.out.println(time);

// 获取小时
int hour = now.getHour();
int hour2 = now.get(ChronoField.HOUR_OF_DAY);
//获取分钟
int minute = now.getMinute();
int minute2 = now.get(ChronoField.MINUTE_OF_HOUR);
// 获取秒
int second = now.getSecond();
int second2 = now.get(ChronoField.SECOND_OF_MINUTE);
System.out.println(hour + "-" + minute + "-" + second);
System.out.println(hour2 + "-" + minute2 + "-" + second2);

3.5 LocalDateTime类的概述

(1)基本概念

java.time.LocalDateTime类主要用于描述ISO-8601日历系统中没有时区的日期时间,
如2007-12- 03T10:15:30。

(2)常用的方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//获取系统当前时间
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
// 获取指定时间
LocalDateTime localDateTime = LocalDateTime.of(2020, 1, 23, 12, 30, 50);
System.out.println(localDateTime);

LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();

LocalDateTime localDateTime1 = localDate.atTime(localTime);
System.out.println(localDateTime1);

LocalDateTime localDateTime2 = localTime.atDate(localDate);
System.out.println(localDateTime2);

// 修改时间 localDateTime 2020-01-23T12:30:50  ==>  2023-12-12 12:12:12
localDateTime = localDateTime.withYear(2023);
localDateTime = localDateTime.withMonth(12);
localDateTime = localDateTime.withDayOfMonth(12);
localDateTime = localDateTime.withHour(12);
localDateTime = localDateTime.withMinute(12);
localDateTime = localDateTime.withSecond(12);
System.out.println(localDateTime);

// 增加3个月  减去1年
localDateTime = localDateTime.plusMonths(3);
localDateTime = localDateTime.minusYears(1);
System.out.println(localDateTime); // 2023-3-12

3.6 Instant类的概述

(1)基本概念

java.time.Instant类主要用于描述瞬间的时间点信息。

(2)常用的方法

在这里插入图片描述

Instant now = Instant.now();
System.out.println(now);

long epochSecond = now.getEpochSecond(); // 获取秒数
System.out.println(epochSecond);

long milli = now.toEpochMilli(); // 获取毫秒数
System.out.println(milli);

3.7 DateTimeFormatter类的概述

(1)基本概念

java.time.format.DateTimeFormatter类主要用于格式化和解析日期。

(2)常用的方法

在这里插入图片描述

LocalDateTime localDateTime = LocalDateTime.of(2023,2,12,16,30,58);
System.out.println(localDateTime);
String dateStr1 = localDateTime.format(DateTimeFormatter.ISO_DATE_TIME); // 默认  2023-02-12T16:30:58	
System.out.println(dateStr1);
String dateStr2 = localDateTime.format(DateTimeFormatter.BASIC_ISO_DATE); // 20230212
System.out.println(dateStr2);

// 自定义日期格式化
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String dateStr3 = dtf.format(localDateTime);
System.out.println(dateStr3);

//将字符串  转换为  日期
LocalDateTime time = LocalDateTime.parse(dateStr3 , dtf);
System.out.println(time);

LocalDateTime parse = LocalDateTime.parse(dateStr1);
System.out.println(parse);

LocalDate parse2 = LocalDate.parse(dateStr2 , DateTimeFormatter.BASIC_ISO_DATE);
System.out.println(parse2);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

添砖#Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值