常用API学习(三):核心时间组件和非核心组件(时间类)

一. JDK8之前传统的日期、时间:

1. Datel类

概述:代表时间和日期。

Date构造器:

在这里插入图片描述
Date常见方法:
在这里插入图片描述
弊端:

  1. 打印日期对象的格式不满足国人的阅读习惯。==>解决:(SimpleDateFormat的format)。
  2. 想要封装一个指定的时间点Date对象计算非常麻烦(麻烦不代表不能做)。==>解决:parse。
  3. 想要修改Date对象表示的时间点非常麻烦。==>解决:Calendar类。

2. SimpleDateFormat(重要)

概述:

代表简单日期格式化,可以用来把日期对象、时间毫秒格式化成我们想要的格式。

SimpleDateFormat构造器:

public SimpleDateFormat(String pttern)

格式化的时间形式的常用的模式对应关系如下:

占位符含义
yyyy年份占位符
MM月份占位符
dd日期占位符
HH小时占位符
mm分钟占位符
ss秒占位符
EEEE星期占位符(一般不用)

SimpleDateFormat使用模版:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒")

代码示例:

public static void main(String[] args) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        Date now = new Date();
        System.out.println("转换的时间:" + simpleDateFormat.format(now));
        Date now1 = simpleDateFormat.parse("2000年02月03日 13时14分52秒");
        System.out.println("时间戳时间:" + now1);
    }

注意:如果格式不匹配模版就会出现异常。

运行结果:
在这里插入图片描述

3. Calendar

概述:

代表的是系统此时时间对应的日历,通过它可以单独获取、修改时间中的年、月、日、时、分、秒等。

Calendar日历类的常见方法:
在这里插入图片描述

Date类底层就维护了一个毫秒值(对日期进行修改非常麻烦),Calendar类的核心思想就是一个时间点的各个组成部分拆分封装,用哪个就获取哪个。

Calendar类一般用于对时间进行修改,获取(获取指定的某一个字段)

public static Calendar getInstance() : 获取一个表示当前时间点的Calendar对象 多态。

Calendar calendar = Calendar.getInstance();

(1)public int get(int field) : 基于时间字段编号获取时间字段值 Calendar类将时间字段编号封装为了常量

int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1; //月份的底层存储方式 从0开始 获取要原基础+1
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "年" + month + "月" + day + "日");

(2)public void set(int field,int value) : 将指定时间字段编号对应的内容修改为value值 [知结果不知过程]

calendar.set(Calendar.YEAR, 2008);
calendar.set(Calendar.MONTH, 7); //月份的底层存储方式 从0开始 设置要原基础-1
calendar.set(Calendar.DAY_OF_MONTH, 8);

(3)public void add(int field,int amount) : 基于指定时间字段编号的内容进行累加(amount:正数累加 负数累减)

calendar.add(Calendar.YEAR, 3);
calendar.add(Calendar.MONTH, 5);
calendar.add(Calendar.DAY_OF_MONTH, 7);

(4)public Date getTime() : 将Calendar保存的时间转换为Date对象

Date date = calendar.getTime();

二. JDK8开始新增的日期、时间

1. LocalDate、LocalTime、LocalDateTime(重要)

LocalDate: 年月日星期(没有时分秒的概念)

LocalTime : 时分秒纳秒(没有年月日的概念)

LocalDateTime :**年月日星期时分秒纳秒 **

获取核心日期对象的方式有两种(都是静态

使用格式:

(1) 基于静态方法now()获取表示当前时间的日期对象。

LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);

运行结果:
在这里插入图片描述

(2)基于静态方法of()获取表示指定时间的日期对象 注意:不同的类调用of传递参数需求不一样。

LocalDate targetLocalDate = LocalDate.of(2008, 8, 8); //2008-08-08
LocalTime targetLocalTime = LocalTime.of(20, 8, 8); //20:08:08
LocalDateTime targetLocalDateTime = LocalDateTime.of(2023, 10, 1, 0, 0, 0);

常用的成员方法:

(1)获取日期对象中对应字段的值。

获取日期对象中对应字段的值 非常多 格式:获取哪个字段就在字段名前面加get 例:获取年份 getYear(); 获取月份 getMonth(); 获取日期 getDayOfMonth()。

代码示例:

System.out.println("now对象中的年份数据是 : " + now.getYear());
System.out.println("now对象中的月份数据是 : " + now.getMonth()); //补:获取纯数字 getMonthValue();
System.out.println("now对象中的日期数据是 : " + now.getDayOfMonth());

(2)修改日期对象中对应字段的值。

修改日期对象中对应字段值 [知结果不知过程] 非常多 格式:修改哪个字段就在字段名前面加with 例:修改年份 withYear()。

代码示例:

LocalDateTime resultLocalDateTime = now.withMonth(12).withDayOfMonth(25).withHour(18).withMinute(0).withSecond(0);
System.out.println("修改后的日期对象时间是 : " + resultLocalDateTime);

(3)累加/累减日期对象中对应字段的值。

累加/累减日期对象中的字段值 [知过程不知结果] 非常多 格式:针对于哪个字段累加就在字段名前面加plus/minus 例:累加年 plusYears() 减少月 minusMonths()

LocalDateTime resultLocalDateTime2 = resultLocalDateTime.plusMonths(4).minusDays(4);
System.out.println("累加/累减后的日期对象时间是 : " + resultLocalDateTime2);

注意事项:由于新的日期类是不可变的,所以在进行了修改,累加/累减操作后,一定要记得接收结果。在修改或者是累减累减过程可以基于链式编程完成多次操作。

2. DateTimeFormatter(重要)

概述:格式化LocalDateTime的时间格式。

日期变字符串:

//使用DateTimeFormatter,日期变字符串(DateTimeFormatter.format返回字符串)
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
       System.out.println(dateTimeFormatter.format(localDateTime));

字符串变日期:

字符串变日期的时候,根据实际需要调用对应parse()的方法,插入模版和字符串进行转换,具体格式如下:

//使用DateTimeFormatter,字符串变日期
LocalDate localDate1 = LocalDate.parse("2000年02月03日", DateTimeFormatter.ofPattern("yyyy年MM月dd日"));
System.out.println(localDate1);

3. ZoneID

概述:

ZoneID时区:l由于世界各个国家与地区的经度不同,各地区的时间也有所不同,因此会划分为不同的时区。

ZoneId 时区的常见方法

在这里插入图片描述

ZonedDateTime带时区的常用方法:

在这里插入图片描述

4. Instant

概述:通过获取Instant的对象可以拿到此刻的时间,该时间由两部分组成:从1970-01-01 00:00:00 开始走到此刻的总秒数 +不够1秒的纳秒数。

常用方法:
在这里插入图片描述

作用:

  1. 可以用来记录代码的执行时间,或用于记录用户操作某个事件的时间点。
  2. 传统的Date类,只能精确到毫秒,并且是可变对象;
  3. 新增的Instant类,可以精确到纳秒,并且是不可变对象,推荐用Instant代替Date。

5. Period(一段时间)

可以用于计算两个LocalDate对象相差的年数、月数、天数。

常用方法:

在这里插入图片描述

代码示例

//Period可以表示一段时间,可以基于计算机获取结果,也可以手动封装一段时间。
//public static Period of(int year,int month,int days)
Period p1 = Period.of(10,3,5);
//between(LocalDate start,LOcalDate end):计算两个时间日期的差值
Period p2 = Period.between(LocalDate.of(2008,Month.AUGUST,8),LocalDate.now);
//基于计算时间差的Period对象调用获取相差的时间
System.out.println(p2.getYear+p2.getMonth+p2.getDays);

6. Duration(持续时间)

概述:可以用于计算两个时间对象相差的天数、小时数、分数、秒数、纳秒数;支持LocalTime、LocalDateTime、Instant等时间。

常用方法:

在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值