深入了解Java8新特性-日期时间API之TemporalAdjusters与TemporalAdjuster

阅读建议

嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议:

  1. 本篇文章大概10000多字,预计阅读时间长需要10分钟。
  2. 本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章,建议收藏起来,方便时常学习与回顾,温故而知新。
  3. 创作不易,免费的点赞、关注,请走上一走,算是对博主一些鼓励,让我更有动力输出更多的干货内容。

注意

本文编写的单元测试是基于java11,具体的版本号是:11.0.19

TemporalAdjusters与TemporalAdjuster

TemporalAdjuster

TemporalAdjuster是Java 8中引入的新的日期时间API的一部分,是一个函数式接口。它能够执行复杂的日期操作,例如,可以获得下一个星期日、当月的最后一天或下一年的第一天。TemporalAdjuster只有一个带Temporal对象参数的抽象方法adjustInto(),可以通过向其传递Temporal对象在其任何实现中调用它。在TemporalAdjusters类中有许多预定义的实现,例如LocalDate、LocalDateTime等。

@FunctionalInterface
public interface TemporalAdjuster {Temporal adjustInto(Temporal temporal);
}

TemporalAdjusters

TemporalAdjusters也是Java 8中处理日期时间的工具类,但它的功能和TemporalAdjuster有所不同。TemporalAdjusters是一个静态工具类,提供了很多静态方法来创建TemporalAdjuster对象,这些方法可以用于对日期时间进行一些常用的调整操作,例如获取本月的第一天、下个月的第一天、本年的第一天或最后一天等。这些方法返回的TemporalAdjuster对象可以用于对日期时间进行相应的调整操作。

功能作用

TemporalAdjusters与TemporalAdjuster的作用在于提供了一种统一的、类型安全的方式来处理日期时间的操作。在过去的版本中,Java的日期时间API主要依赖于Calendar类,但这个类在处理复杂的日期时间操作时显得不够灵活和类型安全。TemporalAdjusters的出现弥补了这一缺陷,使得日期时间操作更加简洁、易用和类型安全。

TemporalAdjusters的意义在于它为Java日期时间API注入了更多的活力,使其更加适应现代应用程序的需求。通过TemporalAdjusters,开发人员可以更方便地处理日期时间的各种操作,例如添加或减去一定的时间量、获取特定时间单位的值、将日期时间转换为不同的格式等等。此外,TemporalAdjusters还支持链式调用,使得对日期时间的操作更加流畅和直观。

使用场景分析

TemporalAdjusters的使用场景非常广泛,可以应用于各种需要调整日期时间的场景。以下是一些常见的使用场景:

  • 计算日期时间差值:TemporalAdjusters提供了一组方法,可以轻松地计算两个日期时间之间的差值,例如计算两个日期之间的天数、小时数或分钟数等。
  • 获取特定时间单位的值:使用TemporalAdjusters可以方便地获取日期时间的特定时间单位的值,例如获取当前日期的年份、月份、日期等。
  • 调整日期时间:TemporalAdjusters提供了一组方法,可以对日期时间进行调整,例如在日期上添加或减去一定的时间量、将日期时间转换为不同的格式等。
  • 解析日期时间字符串:TemporalAdjusters可以用于解析日期时间字符串,并将其转换为Temporal对象。这使得开发人员可以更方便地处理日期时间的字符串表示形式。
  • 时区转换:TemporalAdjusters提供了一些方法,可以将日期时间从一个时区转换为另一个时区。这对于国际化应用程序来说非常有用,可以方便地处理不同时区之间的日期时间转换。

核心方法

TemporalAdjusters#ofDateAdjuster(...)

TemporalAdjusters.ofDateAdjuster(...) 它接受一个函数作为参数,该函数接受一个日期时间对象并返回一个新的日期时间对象,表示对该日期时间对象进行某种调整后的结果。这个方法返回一个TemporalAdjuster对象,可以用于对日期时间对象进行相应的调整操作。通常情况下,这个方法用于创建自定义的TemporalAdjuster对象,以执行一些复杂的日期时间调整操作。

@Test
public void test() {UnaryOperator<LocalDate> unaryOperator = item -> item.minusDays(1);//日期调节逻辑:减去1天TemporalAdjuster temporalAdjuster = TemporalAdjusters.ofDateAdjuster(unaryOperator);//构造日期调节器类LocalDate localDate1 = LocalDate.of(2023, 11, 22);//日期:2023-11-22LocalDate localDate2 = localDate1.with(temporalAdjuster);//执行调节逻辑,并返回调节后结果System.out.println(localDate2);//输出结果:2023-11-21
}

TemporalAdjusters#firstDayOfMonth()

TemporalAdjusters.firstDayOfMonth()是一个静态方法,用于创建一个 TemporalAdjuster 对象,该对象可以用于将给定的日期调整为本月的第一天。

这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用,例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象,可以对日期进行调整。

@Test
public void test1() {TemporalAdjuster temporalAdjuster = TemporalAdjusters.firstDayOfMonth();LocalDateTime localDateTime = LocalDateTime.of(2023, 11, 12, 13, 1, 12);LocalDateTime localDateTime1 = localDateTime.with(temporalAdjuster);System.out.println(localDateTime1);//输出结果:2023-11-01T13:01:12
}

TemporalAdjusters#lastDayOfMonth()

TemporalAdjusters.lastDayOfMonth()是一个静态工厂方法,用于创建一个 TemporalAdjuster 对象,该对象可以用于将给定的日期调整为本月的最后一天。这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用,例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象,可以对日期进行调整。

@Test
public void test2() {TemporalAdjuster temporalAdjuster = TemporalAdjusters.lastDayOfMonth();LocalDate localDate = LocalDate.of(2023, 2, 1);LocalDate localDate1 = localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果:2023-02-28
}

TemporalAdjusters#firstDayOfNextMonth()

TemporalAdjusters.firstDayOfNextMonth() 是一个静态工厂方法,用于创建一个 TemporalAdjuster 对象,该对象可以用于将给定的日期调整为下一个月的第一天。这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用,例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象,可以对日期进行调整。

@Test
public void test3() {TemporalAdjuster temporalAdjuster = TemporalAdjusters.firstDayOfNextMonth();LocalDate localDate = LocalDate.of(2023, 2, 1);LocalDate localDate1 = localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果:2023-03-01
}

TemporalAdjusters#firstDayOfYear()

TemporalAdjusters.firstDayOfYear() 是一个静态工厂方法,用于创建一个 TemporalAdjuster 对象,该对象可以用于将给定的日期调整为本年的第一天。这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用,例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象,可以对日期进行调整。

@Test
public void test4() {TemporalAdjuster temporalAdjuster = TemporalAdjusters.firstDayOfYear();LocalDate localDate = LocalDate.of(2023, 2, 1);LocalDate localDate1 = localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果:2023-01-01
}

TemporalAdjusters#lastDayOfYear()

TemporalAdjusters.lastDayOfYear() 是 一个静态工厂方法,用于创建一个 TemporalAdjuster 对象,该对象可以用于将给定的日期调整为本年的最后一天。这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用,例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象,可以对日期进行调整。

@Test
public void test5() {TemporalAdjuster temporalAdjuster = TemporalAdjusters.lastDayOfYear();LocalDate localDate = LocalDate.of(2023, 2, 1);LocalDate localDate1 = localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果:2023-12-31
}

TemporalAdjusters#firstDayOfNextYear()

TemporalAdjusters.firstDayOfNextYear() 是一个静态工厂方法,用于创建一个 TemporalAdjuster 对象,该对象可以用于将给定的日期调整为下一年度的第一天。这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用,例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象,可以对日期进行调整。

@Test
public void test6() {TemporalAdjuster temporalAdjuster = TemporalAdjusters.firstDayOfNextYear();LocalDate localDate = LocalDate.of(2023, 2, 1);LocalDate localDate1 = localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果:2024-01-01
}

TemporalAdjusters#firstInMonth(...)

TemporalAdjusters.firstInMonth() 是 Java 8 中 java.time.temporal.TemporalAdjusters 类的一个静态工厂方法,用于创建一个 TemporalAdjuster 对象,该对象可以用于将给定的日期调整为本月的第一个星期几。这个方法接受一个 DayOfWeek 类型的参数,用于指定要调整到的星期几。例如,如果想要将日期调整为当前日期月份的第一个星期二,可以这样使用:

@Test
public void test7() {DayOfWeek dayOfWeek = DayOfWeek.of(2);TemporalAdjuster temporalAdjuster = TemporalAdjusters.firstInMonth(dayOfWeek);LocalDate localDate = LocalDate.of(2023, 2, 1);LocalDate localDate1 = localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果:2023-02-07
}

TemporalAdjusters#lastInMonth(...)

TemporalAdjusters.lastInMonth() 是一个静态工厂方法,用于创建一个 TemporalAdjuster 对象,该对象可以用于将给定的日期调整为本月的最后一个星期几。这个方法接受一个 DayOfWeek 类型的参数,用于指定要调整到的星期几。例如,如果想要将日期调整为本月的最后一个星期二,可以这样使用:

@Test
public void test8() {DayOfWeek dayOfWeek = DayOfWeek.of(2);TemporalAdjuster temporalAdjuster = TemporalAdjusters.lastInMonth(dayOfWeek);LocalDate localDate = LocalDate.of(2023, 2, 1);LocalDate localDate1 = localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果:2023-02-28
}

TemporalAdjusters#dayOfWeekInMonth(...)

TemporalAdjusters.dayOfWeekInMonth() 是一个静态工厂方法,用于调整日期的静态方法。这个方法可以用来将给定的日期调整为指定月份中的指定星期几的日期。

这个方法接受两个参数:

  • ordinal - 一个整数,表示月份中的第几天。范围从 1(月份的第一天)到 28、29、30 或 31(根据月份和年份而定)。
  • dayOfWeek - 一个 DayOfWeek 枚举值,表示要调整到的星期几。例如,DayOfWeek.MONDAY 表示星期一。

使用这个方法,你可以将日期调整到指定月份的特定星期几。例如,如果你想将日期调整到 11 月的第一个星期三,你可以这样使用:

@Test
public void test9() {DayOfWeek dayOfWeek = DayOfWeek.of(3);TemporalAdjuster temporalAdjuster = TemporalAdjusters.dayOfWeekInMonth(1, dayOfWeek);LocalDate localDate = LocalDate.of(2023, 11, 30);LocalDate localDate1 = localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果:2023-11-01
}

TemporalAdjusters#next(...)

TemporalAdjusters.next(DayOfWeek dayOfWeek) 是一个用于调整日期的静态方法,这个方法可以用来将给定的日期调整到下一个指定星期几。这个方法接受一个 DayOfWeek 参数,表示要调整到的星期几。例如,DayOfWeek.MONDAY 表示星期一。使用这个方法,你可以将日期调整到下一个特定星期几。例如,如果你想将日期调整到下一个星期日,你可以这样使用:

@Test
public void test10() {DayOfWeek dayOfWeek = DayOfWeek.SUNDAY;TemporalAdjuster temporalAdjuster = TemporalAdjusters.next(dayOfWeek);LocalDate localDate = LocalDate.of(2023, 12, 3);LocalDate localDate1 = localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果:2023-12-10
}

TemporalAdjusters#nextOrSame(...)

TemporalAdjusters.nextOrSame(DayOfWeek dayOfWeek) 是一个用于调整日期的静态方法,这个方法可以用来将给定的日期调整到下一个或相同的星期几。这个方法接受一个 DayOfWeek 参数,表示要调整到的星期几。例如,DayOfWeek.MONDAY 表示星期一。

TemporalAdjusters#nextOrSame(...)与TemporalAdjusters#next(...)区别在于:TemporalAdjusters.nextOrSame(DayOfWeek dayOfWeek) 方法将给定的日期调整到下一个或相同的星期几。这意味着,如果给定的日期已经是星期几,那么调整后的日期将与原始日期相同。否则,调整后的日期将是下一个星期几。TemporalAdjusters.next(DayOfWeek dayOfWeek) 方法将给定的日期调整到下一个星期几,不考虑原始日期是否已经是指定星期几。

假如当前日期是2023年11月30日星期四,返回下一周星期四的日期,使用TemporalAdjusters#nextOrSame(...),返回结果是2023-12-07;而使用TemporalAdjusters#nextOrSame(...)返回的则是其本身2023-11-30,除了这种特殊情况外,其余则是等同的。

@Test
public void test11() {DayOfWeek dayOfWeek = DayOfWeek.of(4);TemporalAdjuster temporalAdjuster = TemporalAdjusters.next(dayOfWeek);LocalDate localDate = LocalDate.of(2023, 11, 30);LocalDate localDate1 = localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果:2023-12-07TemporalAdjuster temporalAdjuster1 = TemporalAdjusters.nextOrSame(dayOfWeek);LocalDate localDate2 = LocalDate.of(2023, 11, 30);LocalDate localDate3 = localDate2.with(temporalAdjuster1);System.out.println(localDate3);//输出结果:2023-11-30
}

TemporalAdjusters#previous(...)

TemporalAdjusters.previous(DayOfWeek dayOfWeek) 是一个用于调整日期的静态方法,这个方法可以用来将给定的日期调整到上一个星期几。这个方法接受一个 DayOfWeek 参数,表示要调整到的星期几。例如,DayOfWeek.MONDAY 表示星期一。

使用这个方法,你可以将日期调整到上一个或同一天的特定星期几。例如,如果你想将日期调整到上一个周的星期三,你可以这样使用:

@Test
public void test12() {DayOfWeek dayOfWeek = DayOfWeek.of(3);TemporalAdjuster temporalAdjuster = TemporalAdjusters.previous(dayOfWeek);LocalDate localDate = LocalDate.of(2023, 11, 1);LocalDate localDate1 = localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果:2023-10-25
}

TemporalAdjusters#previousOrSame(...)

TemporalAdjusters#previousOrSame(DayOfWeek dayOfWeek) 是一个用于调整日期的静态方法,这个方法可以用来将给定的日期调整到上一个或相同的星期几。这个方法接受一个 DayOfWeek 参数,表示要调整到的星期几。例如,DayOfWeek.MONDAY 表示星期一。

TemporalAdjusters#previousOrSame(...)和TemporalAdjusters#previous(...)的区别,与上面的TemporalAdjusters#nextOrSame(...)与TemporalAdjusters#next(...)区别是类似的,不过是上面是下一周,这里是上一周。

使用这个方法,你可以将日期调整到上一个或同一天的特定星期几。例如,如果你想将日期调整到上一个或同一天的星期三,你可以这样使用:

@Test
public void test13() {DayOfWeek dayOfWeek = DayOfWeek.of(3);TemporalAdjuster temporalAdjuster = TemporalAdjusters.previous(dayOfWeek);LocalDate localDate = LocalDate.of(2023, 11, 1);LocalDate localDate1 = localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果:2023-10-25TemporalAdjuster temporalAdjuster1 = TemporalAdjusters.nextOrSame(dayOfWeek);LocalDate localDate2 = LocalDate.of(2023, 11, 1);LocalDate localDate3 = localDate2.with(temporalAdjuster1);System.out.println(localDate3);//输出结果:2023-11-01
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/185865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js 获取数组的最大值与最小值

let arr [1, 2, 5, 8, 10, 100, -1] 1. 使用Math的静态方法max/min Math.max()函数返回给定的一组数中的最大值。 它的语法&#xff1a;Math.max(value1[, value2, ...]) 使用此方法&#xff0c;需要注意&#xff0c;如果没有参数的话&#xff0c;则返回-Infinity。如果有任一…

“消费增值:让每一笔消费创造更多价值“

亲爱的消费者朋友们&#xff0c;你们好&#xff01;今天&#xff0c;我要向你们揭示一种全新的消费理念——消费增值&#xff0c;让你的每一笔消费都变得更有价值&#xff01; 在传统的消费观念中&#xff0c;我们仅仅用金钱来购买物品或享受服务&#xff0c;之后这些物品和服…

无mac电脑生成uniapp云打包私钥证书的攻略

uniapp顾名思义是一个跨平台的开发工具&#xff0c;大部分uniapp的开发者&#xff0c;其实并没有mac电脑来开发&#xff0c;但是生成ios的证书&#xff0c;官网的教程却是需要mac电脑的&#xff0c;那么有没有办法无需mac电脑即可生成uniapp云打包的私钥证书呢&#xff1f; 下…

程序员养生之道

程序员养生之道——如何保持健康的生活方式 摘要&#xff1a; 随着互联网行业的快速发展&#xff0c;越来越多的人选择从事程序员这个职业。然而&#xff0c;长时间的工作和高强度的压力容易导致程序员出现亚健康状况&#xff0c;如头发稀疏、视力下降、肥胖等问题。因此&#…

从谷歌搜索结果出现 AI 生成的图片谈起:AI的利与弊

随着人工智能&#xff08;AI&#xff09;的不断发展&#xff0c;其应用领域也越来越广泛。谷歌搜索是现代人日常生活中的一个常用工具&#xff0c;经常用于获取各种信息。最近&#xff0c;谷歌搜索结果中甚至出现了由AI生成的图片&#xff0c;这引发了人们对AI技术的讨论。 首…

轧钢厂数字化转型 离不开这类几何尺寸测量仪的使用

从“钢铁是怎样炼成的”到“智慧钢铁如何炼成”&#xff0c;传统钢铁冶炼正在完成数智赋能的“华丽转身”。而要想完成数字化转型&#xff0c;就离不开产线的升级&#xff0c;智能化数字化的产线更是离不开重要的品质检测仪&#xff0c;而在一些规则长材的检测中&#xff0c;更…

[UGUI]Unity背包系统制作详细步骤

二、背包制作 1.创建空物体&#xff0c;然后创建UI-Image 制作背包整个背包所在的父UI的背景图 选中BG&#xff0c;找到他的锚点设置&#xff0c;按住Alt键&#xff0c;点击右下角的适配&#xff0c;让锚点和内容都匹配画布 PS&#xff1a;不按Alt键是设置一个元素的锚点位…

leetcode算法之链表

目录 1.两数相加2.两两交换链表中的节点3.重排链表4.合并K个升序链表5.K个一组翻转链表 1.两数相加 两数相加 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(…

TDI网络过滤驱动应用(一)

文章目录 TDI网络过滤驱动应用1. 技术概览2. 数据包的抓取3. 应用实例3.1 TrafficShaper(限流)3.2 DnsRedirector(DNS重定向)3.3 TcpRedirector(TCP重定向) 4. 总结与参考 TDI网络过滤驱动应用 在前面的文章中&#xff0c;我们分析了TDI网络过滤驱动的基本开发框架以及TDI网络…

C/C++ 实现FTP文件上传下载

FTP&#xff08;文件传输协议&#xff09;是一种用于在网络上传输文件的标准协议。它属于因特网标准化的协议族之一&#xff0c;为文件的上传、下载和文件管理提供了一种标准化的方法&#xff0c;在Windows系统中操作FTP上传下载可以使用WinINet库&#xff0c;WinINet&#xff…

微服务--07--Seata 分布式事务

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 分布式事务1.认识Seata2.部署TC服务2.1.准备数据库表2.2.准备配置文件2.3.Docker部署 3.微服务集成Seata3.1.引入依赖3.2.改造配置3.3.添加数据库表3.4.测试 分布式…

什么是网络安全 ?

网络安全已成为我们生活的数字时代最重要的话题之一。随着连接设备数量的增加、互联网的普及和在线数据的指数级增长&#xff0c;网络攻击的风险呈指数级增长。 但网络安全是什么意思&#xff1f; 简而言之&#xff0c;网络安全是一组旨在保护网络、设备和数据免受网络攻击、…

Zabbix“专家坐诊”第213期问答汇总

问题一 Q&#xff1a;Zabbix报错&#xff1a;Zabbix server is not running :the information displayed may not be current&#xff0c;是什么问题呢&#xff1f; A&#xff1a; 1、数据库软件问题导致导入的zabbix数据库不完整2、zabbix Server配置问题3、zabbix-server没…

【【FPGA的 MicroBlaze 的 介绍与使用 】】

FPGA的 MicroBlaze 的 介绍与使用 可编程片上系统&#xff08;SOPC&#xff09;的设计 在进行系统设计时&#xff0c;倘若系统非常复杂&#xff0c;采用传统 FPGA 单独用 Verilog/VHDL 语言进行开发的方式&#xff0c;工作量无疑是巨大的&#xff0c;这时调用 MicroBlaze 软核…

nvm 下载node时候下载不到npm包的解决方法

个人博客链接 公众号-nvm 下载node时候下载不到npm包的解决方法 求关注 可以跳过的背景 最近项目比较有空&#xff0c;所以就可以有时间写一些demo&#xff0c;主要测试下react的一些语法&#xff0c;毕竟自己上次写react已经是22年的7月份了,期间对于react-router等的hook…

Java中的Integer.bitCount浅析

文章目录 Java中的Integer.bitCount浅析问题思考Integer.bitCount解释拓展 Java中的Integer.bitCount浅析 原文链接 问题 有一个整数x,我们需要统计该整数的二进制表示中包含的1的个数。这个也被称为汉明重量&#xff08;Hamming weight&#xff09;。 例如&#xff0c;整数…

创建JDK8版本的SpringBoot项目的方法

目录 一.通过阿里云下载 二.通过IDEA创建 1.下载安装JDK17 2.创建SpringBoot 3.X的项目 3.把JDK17改成JDK8 截止到2023.11.24&#xff0c;SpringBoot不再支持3.0X之前的版本&#xff0c;3.0X之后的版本所对应的JDK版本为JDK17&#xff0c;下面介绍如何在idea上继续使用JDK…

解析javascript数组方法 find 和 filter 有何区别

首先用一个案例可以很直观的看到 find 和 filter 的区别&#xff1b; 相同点&#xff1a; 两者分别可以接受三个参数&#xff1a;当前元素、当前索引、整个数组&#xff1b;两者都可以用来查找数组中符合条件的元素&#xff1b; 不同点&#xff1a; find&#xff1a; 用于查…

C/C++不定参数的使用

文章目录 C语言的不定参C的不定参 C语言的不定参 C语言的不定参数最常见的应用示例就是printf函数&#xff0c;如下&#xff0c;参数列表中的...表示不定参数列表 #include <stdio.h> int printf(const char *format, ...);试着模拟实现C语言的printf函数 void myprin…

C++基础——文件操作

文章目录 1 概述2 文本文件2.1 写文件2.1.1 写文件流程2.1.2 文件打开方式 2.2 读文件 3 二进制文件3.1 写文件3.2 读文件 1 概述 程序最基本的操作之一就是文件操作&#xff0c;程序运行时的数据都是临时数据&#xff0c;当程序结束后就不复存在了。通常都是通过文件或其他持…